2020年10月19日月曜日

mplfinanceのチャートに凡例を追加する

mplfinanceのチャートに凡例を追加するには、plotメソッドでreturnfig引数を使用します。

サンプルコード

以下のサンプルでは移動平均2, 4, 6に対応する凡例ma2, ma4, ma6を表示しています。
from datetime import datetime
import pandas as pd
import mplfinance as mpf

fx_data = [
    [datetime(2020, 7, 8), 107.475, 107.711, 107.202, 107.253],
    [datetime(2020, 7, 9), 107.231, 107.398, 107.097, 107.201],
    [datetime(2020, 7, 10), 107.169, 107.264, 106.639, 106.93],
    [datetime(2020, 7, 13), 106.861, 107.319, 106.787, 107.283],
    [datetime(2020, 7, 14), 107.227, 107.427, 107.119, 107.236],
    [datetime(2020, 7, 15), 107.205, 107.309, 106.666, 106.939],
    [datetime(2020, 7, 16), 106.895, 107.401, 106.833, 107.272],
    [datetime(2020, 7, 17), 107.250, 107.360, 106.938, 106.986],
    [datetime(2020, 7, 20), 107.011, 107.537, 106.970, 107.279],
    [datetime(2020, 7, 21), 107.193, 107.367, 106.681, 106.803],
    [datetime(2020, 7, 22), 106.789, 107.288, 106.705, 107.153],
    [datetime(2020, 7, 23), 107.124, 107.231, 106.711, 106.865],
    [datetime(2020, 7, 24), 106.826, 106.872, 105.681, 106.052]
]

df = pd.DataFrame(fx_data, columns=['date', 'open', 'high', 'low', 'close'])
df = df.set_index("date")
cs  = mpf.make_mpf_style(gridcolor="lightgray", mavcolors=['red', 'green', '#405173'])
fig, axes = mpf.plot(df,type='candle', datetime_format='%Y/%m/%d', mav=(2,4,6), returnfig=True)
legend=["ma2", "ma4", "ma6"]
axes[0].legend(legend)
fig.show()

・実行結果

○2021/12/08追記: モジュールの仕様が変わったのか、凡例の色が正しく表示されなくなったのでソースコードを修正しました。
from datetime import datetime
import pandas as pd
import mplfinance as mpf
import matplotlib.patches as mpatches

fx_data = [
    [datetime(2020, 7, 8), 107.475, 107.711, 107.202, 107.253],
    [datetime(2020, 7, 9), 107.231, 107.398, 107.097, 107.201],
    [datetime(2020, 7, 10), 107.169, 107.264, 106.639, 106.93],
    [datetime(2020, 7, 13), 106.861, 107.319, 106.787, 107.283],
    [datetime(2020, 7, 14), 107.227, 107.427, 107.119, 107.236],
    [datetime(2020, 7, 15), 107.205, 107.309, 106.666, 106.939],
    [datetime(2020, 7, 16), 106.895, 107.401, 106.833, 107.272],
    [datetime(2020, 7, 17), 107.250, 107.360, 106.938, 106.986],
    [datetime(2020, 7, 20), 107.011, 107.537, 106.970, 107.279],
    [datetime(2020, 7, 21), 107.193, 107.367, 106.681, 106.803],
    [datetime(2020, 7, 22), 106.789, 107.288, 106.705, 107.153],
    [datetime(2020, 7, 23), 107.124, 107.231, 106.711, 106.865],
    [datetime(2020, 7, 24), 106.826, 106.872, 105.681, 106.052]
]

df = pd.DataFrame(fx_data, columns=['date', 'open', 'high', 'low', 'close'])
df = df.set_index("date")
cs  = mpf.make_mpf_style(gridcolor="lightgray", mavcolors=['red', 'green', '#405173'])
fig, axes = mpf.plot(df,type='candle', datetime_format='%Y/%m/%d', mav=(2,4,6), style=cs, returnfig=True)
legend=["ma2", "ma4", "ma6"]

# 移動平均凡例の色を指定
ma2_patch = mpatches.Patch(color='red', label='ma2')
ma4_patch = mpatches.Patch(color='green', label='ma4')
ma6_patch = mpatches.Patch(color='#405173', label='ma6')
axes[0].legend(handles=[ma2_patch, ma4_patch, ma6_patch])

fig.show()

○実行結果

関連情報

・mplfinanceのインストール方法は以下の記事を参照してください。
JupyterLabにmplfinance、pandas、matplotlibをインストールして、ロウソク足チャートを表示する

・mplfinanceのgithubリポジトリ
https://github.com/matplotlib/mplfinance

Ubuntu 20.04にJupyter Labをインストールする(pipenv版)

Raspberry Pi(Raspbian Buster)にJupyter Labをインストールする

5 件のコメント:

  1. コメント失礼します。
    以前コチラの記事を参考に凡例を表示させたときはうまく行ったのですが(2021年10月ごろ)
    最近PCを新調して同じプログラムで凡例を表示させましたがうまくいきません。
    具体的には、凡例を表示させると、ma2のところの黒の細線、ma4のところに黒の太線、ma6のところに水色の線が表示されます。
    http://iup.2ch-library.com/i/i021650877815874711287.png

    解決策などご存知でしたら教えて下さい。

    返信削除
    返信
    1. 書き込みありがとうございます。たしかに凡例の色がおかしくなっていましたので、ソースコードを変更してみました(また、スタイルが正しく適用されていなかった部分も合わせて修正しました)。。。ちょっと冗長になりますが、凡例の色を設定できます。

      削除
    2. 迅速なご回答ありがとうございました。
      私もこちらの記事参考に再度挑戦しています。

      削除
    3. いつも参考にさせていただいております。
      凡例のボックスの背景色や文字色を変更することは可能でしょうか?
      ダークモード用に背景色を黒にしたのですが、凡例が読めなくなってしまいました。

      削除
  2. このコメントは投稿者によって削除されました。

    返信削除