🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

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

Python

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

Q&A

解決済

1回答

7308閲覧

mplfinanceとmatplotlibのグラフの重ね合わせは可能でしょうか?

growtakuma

総合スコア1

Matplotlib

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

Python

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

0グッド

1クリップ

投稿2021/02/26 12:01

編集2021/02/27 14:02

###前提・実現したいこと
mplfinanceで描画したチャートとmatplotlibで描画したヒストグラムを重ねて描画したい

いろいろ試してみたのですが、matplotlibからfinance分野が分離してしまって同じように扱えないみたいで困っています。

質問用ソースコードは
if Trueでmatplotlibのヒストグラム
if Falseにしたらmplfinanceのローソク足が表示されるようにしています。

この2つを横軸(価格)は合わせた上で重ね合わせたいのですが、そもそも同時に使えるものなのかどうかも分かっていません。元々同じライブラリだったということで動くと思って数日頑張っていましたがどうにも分からず。。。

解決のために助言をいただけると幸いです。

よろしくお願いします。

###該当のソースコード

Python3

1import pandas as pd 2import mplfinance as mpf 3import matplotlib.pyplot as plt 4import time 5 6#実際はAPIで定期的に取得し直す 7ohlc = pd.DataFrame([[pd.Timestamp("20210101"),100,101,98,99,0],[pd.Timestamp("20210102"),99,99,95,96,0],[pd.Timestamp("20210103"),96,98,96,98,0]],columns=["Time","Open","High","Low","Close","Volume"]) 8 9data ={99: 0.0876, 99.2: 0.02, 99.4: 0.001, 99.6: 0.1315, 99.8: 0.21, 100: 0.3988, 100.2: 0.9821, 100.4: 0.4587, 100.6: 0.683, 100.8: 0.5, 101: 0.4952} 10 11#mpfに読み込ませるために時事列配列に変換 12ohlc.set_index("Time", inplace=True) 13 14#当コードでは使わないが、実際は情報をリアルタイム更新する処理のため、似た構造にして再現されるようにしてあります。 15plt.ion() 16fig, axes = mpf.plot(ohlc,returnfig=True,figsize=(11,8),type='candle',title='\n\nBTC-PERP 1Minute Chart') 17ax = axes[0] 18while True: 19 #実際はohlcが更新されるのでwhileTrueに入れています。 20 #ここをTrue、False手動切替でそれぞれの描画ができる。 21 #この2つのパーツを組み合わせて重ねたグラフを表示させたい。 22 if True: 23 # こっちを動かすとヒストグラムを表示 24 plt.clf() 25 plt.barh(list(data), data.values(), color="orange") 26 plt.pause(0.01) 27 else: 28 # こっちを動かすとチャートを表示 29 ax.clear() 30 mpf.plot(ohlc, ax=ax, type="candle") 31 fig.canvas.draw() 32 fig.canvas.flush_events() 33 time.sleep(10)

###完成イメージ
1,現在描画できているヒストグラム
イメージ説明
2,現在描画できているチャート
イメージ説明
3,完成予想図(イラスト合成したもので実装はできてません)
イメージ説明

###追記 ライブラリバージョン
mplfinance:0.12.7a7
matplotlib:3.3.4

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どちらを先に描画するかによって見え方が違いましたので、順番を変えてそれぞれ描画してみました。
いろいろ調整が必要な感じではあります。

python

1import pandas as pd 2import mplfinance as mpf 3import matplotlib.pyplot as plt 4 5ohlc = pd.DataFrame([[pd.Timestamp("20210101"),100,101,98,99,0],[pd.Timestamp("20210102"),99,99,95,96,0],[pd.Timestamp("20210103"),96,98,96,98,0]],columns=["Time","Open","High","Low","Close","Volume"]) 6data ={99: 0.0876, 99.2: 0.02, 99.4: 0.001, 99.6: 0.1315, 99.8: 0.21, 100: 0.3988, 100.2: 0.9821, 100.4: 0.4587, 100.6: 0.683, 100.8: 0.5, 101: 0.4952} 7ohlc.set_index("Time", inplace=True) 8 9fig = mpf.figure(figsize=(11,8)) 10ax1 = fig.subplots() 11ax1.barh(list(data), data.values(), color="orange") 12ax2 = ax1.twiny() 13mpf.plot(ohlc, ax=ax2, type="candle") 14fig.suptitle('BTC-PERP 1Minute Chart') 15mpf.show() #or plt.show()

PNG1

python

1#(略) 2fig = mpf.figure(figsize=(11,8)) 3ax1 = fig.subplots() 4mpf.plot(ohlc, ax=ax1, type="candle") 5ax2 = ax1.twiny() 6ax2.barh(list(data), data.values(), color="orange") 7fig.suptitle('BTC-PERP 1Minute Chart') 8mpf.show() #or plt.show()

PNG2

参考URL:
Subplots in mplfinance
How to use your own matplotlib Figure and Axes in mplfinance

投稿2021/02/27 13:53

etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

growtakuma

2021/03/01 09:04

ありがとうございます!! これで出来ました! ただすごく重いですねこのライブラリ。 元々WebSocketでデータを受け取り次第更新を考えていましたが、更新頻度は考えたほうがいいですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問