質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

AttributeError: 'Figure' object has no attribute 'fbind'というエラー⇒コード大胆修正ののち、別の問題が発生しました。

mmmiii313131
mmmiii313131

総合スコア3

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0リアクション

0クリップ

850閲覧

投稿2021/06/15 01:41

編集2021/06/16 09:08

VScode,Anaconda環境で、python,kivy,matplotをつかって、チャートを表示したいです。

出ているエラー

AttributeError: 'Figure' object has no attribute 'fbind'

チャートではなく、グラフ表示はできました。

python

from kivy.app import App from kivy.uix.boxlayout import BoxLayout import matplotlib.pyplot as plt import matplotlib # Kivy 上で Matplotlib を使うために必要な準備 matplotlib.use('module://kivy.garden.matplotlib.backend_kivy') class MyApp(App): def __init__(self, *args, **kwargs): super().__init__(*args, *kwargs) def build(self): self.screen = BoxLayout() fig, ax = plt.subplots() x = [1,2,3,4] y = [8,6,7,5] ax.plot(x,y) self.screen.add_widget(fig.canvas) return self.screen if __name__ == '__main__': MyApp().run()

ですが、株価のチャートではうまく動きません。
下記はネットで拾ったコードをクラスと関数の中に入れたものです。

python

from kivy.app import App from kivy.uix.boxlayout import BoxLayout import matplotlib.pyplot as plt import matplotlib #-------------------------------- from os import close import pandas as pd from plotly.graph_objs import layout import yfinance as yf import plotly.graph_objs as go import datetime import matplotlib as mpl import numpy as np import plotly.express as px #-------------------------------- # Kivy 上で Matplotlib を使うために必要な準備 matplotlib.use('module://kivy.garden.matplotlib.backend_kivy') class MyApp(App): def __init__(self, *args, **kwargs): super().__init__(*args, *kwargs) def build(self): self.screen = BoxLayout() df = yf.download('wfc', start=datetime.date(2018,1,1), end=datetime.date.today(), auto_adjust='id') df['ma50'] = df['Close'].rolling(50).mean().shift() df['ma200'] = df['Close'].ewm(200).mean().shift() fig = go.Figure() fig.add_trace(go.Scatter(x=df.index, y=df.ma50, name='MA50')) fig.add_trace(go.Scatter(x=df.index, y=df.ma200, name='MA200')) fig.add_trace(go.Candlestick(x=df.index, open=df.Open, high=df.High, low=df.Low, close=df.Close, name='WFC')) fig.update(layout_xaxis_rangeslider_visible = True) self.screen.add_widget(fig) return self.screen if __name__ == '__main__': MyApp().run()

プログラミング初心者です。fbindが何なのか、調べてもわかりませんでした。

また、昨晩、kivyを使わないコードについて質問しましたが、未解決のままです。
fig.show()が機能しないといった内容です。
figはfigureの略だと思いますが、その件とは関係がありますか?よろしくお願いします。

ps:参照先のURLを表記すべきですが、いろいろしすぎてどこから引っ張ってきたかわからなくなってしまいました。
次回から記述いたします。ごめんなさい。

ps:fbbind()関数を使えばよいのではないかと思いましたが、どんな記述にすればよいかわかりません。
下記サイトで学習中です。。。
https://qiita.com/gotta_dive_into_python/items/df8325cc1575800d3a99

解決策が浮かばなかったので書き直しました。

python

from kivy.uix.boxlayout import BoxLayout import yfinance as yf from kivy.app import App import mplfinance as mf from kivy.app import App from kivy.uix.boxlayout import BoxLayout from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg data = yf.download(tickers='SPY',period="7d", interval = "1m") print(data) class PlotChart(App): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) data = yf.download(tickers='SPY',period="7d", interval = "1m") chart = mf.plot(data, style='yahoo', type='candle', title= 'S&P500 Chart', figratio=(12,4),volume=True) widget = FigureCanvasTkAgg(chart) self.add_widget(widget) class RootWidget(BoxLayout): pass class GraphApp(App): def __init__(self,*args, **kwargs): super().__init__(*args, **kwargs) self.title = 'S&P500Chart' def build(self): return RootWidget()

kivy

#:kivy2.0.0 <RootWidget>: orientation: 'vertical' Label: text: 'The following is a graph of Matplotlib' size_hint_y: 0.2 PlotChart: <PlotChart>:

エラーは出ませんが、表示がされません。
よろしくお願いします。。。

編集しなおしたコード(まだ想定外の表示がされる)

python

from kivy.uix.boxlayout import BoxLayout import yfinance as yf from kivy.app import App import mplfinance as mf from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg import matplotlib.pyplot as plt import pandas as pd import mplfinance as mpf import numpy as np #data = yf.download(tickers='SPY',period="7d", interval = "1m") #print(data) class PlotChart(BoxLayout): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) data = yf.download(tickers='SPY',period="7d", interval = "1m") x = np.linspace(-np.pi, np.pi, 100) y = np.sin(x) fig, ax = plt.subplots() ax.plot(x, y) chart = mf.plot(data, style='yahoo', type='candle', title= 'S&P500 Chart', figratio=(12,4),volume=True) widget = FigureCanvasKivyAgg(chart) self.add_widget(widget.canvas) class RootWidget(BoxLayout): pass class GraphApp(App): def __init__(self,*args, **kwargs): super().__init__(*args, **kwargs) self.title = 'S&P500Chart' def build(self): return RootWidget() def main(): app = GraphApp() app.run() if __name__ == '__main__': main()

kivy

#:kivy 2.0.0 <RootWidget>: BoxLayout: orientation: 'vertical' Label: text: 'The following is a graph of Matplotlib' size_hint_y: 0.2 PlotChart: <PlotChart>:

FigureCanvasKivyAggはkivyでは使えないとのことで、kivygarden.graphでも自分なりに解釈して書いてみましたが、黒い画面が表示されます。

from datetime import datetime from kivy_garden.graph import Graph, MeshLinePlot from matplotlib.pyplot import cla from kivy.app import App from datetime import datetime import sys from yahoo_finance_api2 import share from yahoo_finance_api2.exceptions import YahooFinanceError from datetime import datetime class graph_charengeApp(App): def make_plot(self, plot_dates,tickers_on_plot, plot_colors): #データを読み込んで分割する my_share = share.Share('MSFT') symbol_data = None try: symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY, 60, share.FREQUENCY_TYPE_MINUTE, 5) except YahooFinanceError as e: print(e.message) sys.exit(1) date = symbol_data['timestamp'] price = symbol_data['close'] #プロットする graph = Graph(xlabel='datetime', ylabel='price', x_ticks_minor=5, x_ticks_major=25, y_ticks_major=1, y_grid_label=True, x_grid_label=True, padding=5, x_grid=True, y_grid=True, xmin=date[10], xmax=date[0], ymin = price[0] - 10, ymax = price[0]) x=range(11) if (len(tickers_on_plot)>0): for i in x: plot = MeshLinePlot(color=[1, 0, 0, 1]) plot.points = [(date[i], price[i]) for date[i], price[i] in zip(date, price)] graph.add_plot(plot) return graph graph_charengeApp().run()

yahoo_finance_api2のtimestanpって暗号みたいなデータなんですね、、
このままだと使えないですよね

(時間は表示できていませんが、)チャートの表示ができました

まず、日付の扱いが難しかったので、時間(取得したタイムスタンプ)をインデックスにおき変えて、表示を試みました。
前のコードは修正点が多く、どこを修正したかは割愛します。

python

from datetime import datetime from kivy_garden.graph import Graph, MeshLinePlot from matplotlib.pyplot import cla from kivy.app import App from datetime import datetime import sys from yahoo_finance_api2 import share from yahoo_finance_api2.exceptions import YahooFinanceError from datetime import datetime class graph_charengeApp(App): def build(self): #データを読み込んで分割する my_share = share.Share('MSFT') symbol_data = None try: symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY, 60, share.FREQUENCY_TYPE_MINUTE, 5) except YahooFinanceError as e: print(e.message) sys.exit(1) #data = symbol_data['timestamp'] #new_data = [datetime.utcfromtimestamp(int(data[i]/1000)) for i in range(len(data))] price = symbol_data['close'] #プロットする graph = Graph(xlabel='datetime', ylabel='price', x_ticks_minor=5, x_ticks_major=25, y_ticks_major=10, y_grid_label=True, x_grid_label=True, padding=5, x_grid=True, y_grid=True, xmin=0, xmax= 100, ymin = 255, ymax = 265) #x=range(11) #if (len(tickers_on_plot)>0): #for i in x: plot = MeshLinePlot(color=[1, 0, 0, 1]) plot.points = [(i, price[i]) for i in range(0, 100)] graph.add_plot(plot) return graph graph_charengeApp().run()

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。