0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

matplotlibで図に文字出すのめんどくさいときの簡単な方法;instead of ax.text

Last updated at Posted at 2023-10-23

対象読者

  • パッと図を作りたいだけなのに、図に文字を入れるのがめんどくさい!
  • plt.*** でサッと図を作りたいけど、位置調整のために ax.*** スタイルで書くことを強要されるのがイヤだ!
     

TL; DR1

ax.text の代わりに凡例 plt.legendを使うとラク!
 

テキスト表示のめんどくさいポイント

位置調整がめんどくさい

パッと文字列を図に入れたいだけなのに、

  • データの範囲がわからないとき
  • データの範囲が変動するとき

こういう場合、テキトーに plt.text または ax.text を使ってしまうと、テキストがあっちゃこっちゃに行ってしまいます。

 
図中のテキストの位置を前もって思い通りに指定するには

  1. 図の端を get_xlim で取得して、それを用いてテキストの位置を調節する(めんどすぎ)
  2. 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")

histogram_with_average.png

  1. TL; DRは Too Long; Didn't Readの略らしい。みんな使ってるので本記事でも使ってみた。しかし...(参考
     
     

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?