@mormor3g (Misato Kai)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

mplfinanceのチャートをkivyに組み込みたい

解決したいこと

mplfinanceのチャートをkivyに組み込みたいですが、調べても方法が出てこなくて困っています。

発生している問題・エラー

 ImportError: cannot import name '_png' from 'matplotlib'

該当するソースコード

from datetime import datetime
from logging import root
from os import kill
from kivy.core import window
from kivy.uix.widget import Widget
#import matplotlib

from numpy.core.fromnumeric import size

from kivy.uix.floatlayout import FloatLayout
from kivy.uix.layout import Layout
from kivy_garden.graph import Graph, MeshLinePlot
##https://kivy-garden.github.io/graph/flower.html ↑
from kivy.app import App

import sys
from numpy import right_shift, rint
from pandas.core import frame
from pandas.core.indexes.api import get_objs_combined_axis
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError

from kivy.uix.scrollview import ScrollView
from kivy.app import runTouchApp
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window
from kivy.base import runTouchApp
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
import sys
from bokeh.plotting import figure, output_notebook, show
from datetime import datetime
from math import pi
import pandas as pd
import mplfinance as mpf
import matplotlib.pyplot as plt
import plotly.graph_objects as go
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg 

#----------------------



class Chart_plot(Screen):
    def on_kv_post(self, *args, **kwargs):
        '''widgetの初期化が完全に終わった後に行いたい処理を書く所'''
        super().on_kv_post(*args, **kwargs)
        self.ids.graph_test.add_widget(self.chart())

    @classmethod
    def chart(cls):
        #データを読み込んで分割する

        my_share = share.Share('MSFT')
        symbol_data = None
        try:
            symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,
                                                    21,
                                                    share.FREQUENCY_TYPE_MINUTE,
                                                    15)
        except YahooFinanceError as e:
            print(e.message)
            sys.exit(1)

        data = symbol_data['timestamp']
        date = [datetime.utcfromtimestamp(int(data[i]/1000)) for i in range(len(data))]

        close = symbol_data['close']
        open = symbol_data['open']
        high = symbol_data['high']
        low = symbol_data['low']
        volume = symbol_data['volume']
        #----------
        df = pd.DataFrame()
        df[0] = date
        df[1] = open
        df[2] = high
        df[3] = low
        df[4] = close
        df[5] = volume
        feature = ["date","open","high" ,"low","close", "volume"]

        df.columns = feature

        df.set_index('date', inplace = True)


        df.index.name = 'Date'
        df.shape
        df.head(3)
        df.tail(3)

        mpf.plot(df,type='candle')
        canvas = FigureCanvasKivyAgg(mpf, master=frame)
        cls.add_widget(canvas)



class ChartMainApp(App):
    def build(self):
        return Chart_plot()


if __name__ == '__main__':
    ChartMainApp().run()

このところがわかりません。↓

        mpf.plot(df,type='candle')
        canvas = FigureCanvasKivyAgg(mpf, master=frame)
        cls.add_widget(canvas)


自分で試したこと

上記のわからに所のコードを変えてみたり、matplotlibとpythonのバージョンを下げてみたりしました。(今は最新バージョン)

0 likes

1Answer

Your answer might help someone💌