対象読者
- パッと図を作りたいだけなのに、図に文字を入れるのがめんどくさい!
-
plt.***
でサッと図を作りたいけど、位置調整のためにax.***
スタイルで書くことを強要されるのがイヤだ!
TL; DR1
ax.text
の代わりに凡例 plt.legend
を使うとラク!
テキスト表示のめんどくさいポイント
位置調整がめんどくさい
パッと文字列を図に入れたいだけなのに、
- データの範囲がわからないとき
- データの範囲が変動するとき
こういう場合、テキトーに plt.text
または ax.text
を使ってしまうと、テキストがあっちゃこっちゃに行ってしまいます。
図中のテキストの位置を前もって思い通りに指定するには
- 図の端を
get_xlim
で取得して、それを用いてテキストの位置を調節する(めんどすぎ) -
ax.text
の引数にtransform=ax.transAxes
を入れる(ax.***
スタイルを強要される)
という方法を採らなければならない(他にもあるかも)。
解決策
上記のめんどくささを解消した方法が、凡例を使うというものです。
【メリット】
- 位置調整を勝手にしてくれる
-
plt.***
スタイルでもOK
【デメリット】
- 2行以上のテキストには向かない
例(図に平均値をパッと載せたいとき)
import matplotlib.pyplot as plt
import numpy as np
# ランダムなデータを生成
data = np.random.randn(1000) # 1000個のランダムなデータポイント
ave = np.average(data)
# ヒストグラムを作成(ラベルに書きたいテキストを入れておく)
plt.hist(data, bins=20, color='skyblue', edgecolor='black', label=f"Ave.: {ave:.3g}")
plt.title('Histogram') # グラフのタイトル
plt.xlabel('Value') # x軸ラベル
plt.ylabel('Frequency') # y軸ラベル
###凡例を使う########################
plt.legend()
####################################
# グラフを保存
plt.savefig("histogram_with_average.png")