Matplotlibの時系列グラフにテキストを入れる方法

Python

はじめに

株の連動調査に関するプログラムを作成しているときに、Matplotlibの時系列グラフにテキストを入れようとしてハマった箇所と対応方法についてまとめました。

ハマった箇所

Matplotlibのグラフにテキストを表示させるため際に使用する関数は、ax.text()です。
2021年9月13日の値付近に「B株に連動」のテキストを表示させるために、試しに下記のコードでテキストを表示させようとしましたが、グラフにテキストが表示されませんでした。

<コードの抜粋>

ax.text(2021-09-13, 13, 'B株に連動', size=15, color='red')

<グラフ表示結果>

対応方法

Matplotlibのax.textのドキュメントを確認すると「X座標とY座標はfloat変数」であることが判りました。
<参考URL>
matplotlib.axes.Axes.text — Matplotlib 3.4.3 documentation

X座標の日付をfloat変数に変換する必要がありました。
こちらも、Matplotlibのdatesのドキュメントを確認すると、日付を数値に変換できるdate2num関数が用意されていました。
<参考URL>
matplotlib.dates — Matplotlib 3.4.3 documentation

サンプルコード

サンプルコードとグラフ出力結果は以下の通りです。
2021年9月13日の値付近に「B株に連動」のテキストを表示させることができました。

<サンプルコード>

# DataFrameのライブラリを読み込む
import pandas as pd

# グラフ表示のライブラリとグラフ表示で日本語を表示するためのライブラリを読み込む
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import japanize_matplotlib

# 日付を数値に変換するためのライブラリを読み込む
from matplotlib.dates import date2num
from datetime import datetime


# X軸に2021年9月9日から2021年10月9日の日付を設定する
x = pd.date_range('2021-09-09', '2021-10-09', freq='D')

# Y軸に数値を割り当てる
y = [17, 18, 27, 20, 23, 14, 26, 18, 20, 26, 24, 29, 15, 30, 22, 23, 12, 18, 17, 22, 13, 22, 19, 30, 12, 13, 12, 12, 20, 18, 30]

# 時系列グラフを描画する
fig, ax = plt.subplots()

# グラフを描画する
ax.plot(x, y)

# 日付目盛間隔を表示する
# 木曜日ごとに日付を表示する
weeks = mdates.WeekdayLocator(byweekday=mdates.TH)
ax.xaxis.set_major_locator(weeks)

# 日付表記を90度回転する
ax.tick_params(axis='x', rotation=90)

# 方眼表示、タイトルを設定する
ax.grid()
ax.set_title('終値の予測')

# X座標:2021年9月13日、Y座標:13にコメントの位置にコメントを表示する
# 日付を数値に変換する
xdata = date2num(datetime(2021, 9, 13))

# 表示するコメントを設定する
# ax.text(X座標, Y座標, '表示するコメント', 文字サイズ, 色)
ax.text(xdata, 13, 'B株に連動', size=15, color='red')

# 画面出力
plt.show()

<グラフ描画>

 

コメント

タイトルとURLをコピーしました