たまに使うmatplotlibでのグラフ・プロットの作成の際のラベルの表示例です。
日本語のラベルが文字化けしないようにする
pip install japanize-matplotlib
などとして japanize-matplotlibをインストールして下さい。その後、コードの中でimport japanize_matplotlib
を実行して下さい。以下の例ではグラフの中に日本語を使用していますが、文字化けせずに表示できています。
使用例:ランダムフォレスト - pythonで機械学習 - K_DM
legend(凡例)の表示方法の指定
通常
自動で適切な場所に表示されます.
plt.title("moon") plt.scatter(x0, y0, label="label-A") plt.scatter(x1, y1, label="label-B") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend()
スタイルシートで指定する
参考:matplotlibのスタイルシートを修正してグラフの見た目を調整する - pythonで機械学習 - K_DM
自分で定義したスタイルシートにlegendのデフォルトの位置を指定することができます。ただし、best
/upper left
/bottom right
など決められた位置しか指定できず、枠外などは指定できません。
メリットとして、毎回文字サイズやlegendの位置を指定しなおす必要がなくなります。
場所を指定(グラフ枠内)
lower right
(右下)に指定.
lower
⇆upper
, left
⇆ center
⇆right
で場所を指定.
場所の指定に使用できる文字列はドキュメントの以下のページに記載されています.
matplotlib.legend — Matplotlib 3.5.1 documentation
plt.title("moon") plt.scatter(x0, y0, label="label-A") plt.scatter(x1, y1, label="label-B") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend(loc='lower right')
場所の詳細な指定例は以下に載せました。
凡例表示を複数列に分割する, 枠に影をつける, 横幅いっぱいにする
ncol=2
で凡例表示の中にいくつの列を作るかを決定します(この場合は2).
shadow=True,
で影をつけます.
plt.title("moon") plt.scatter(x0, y0, label="label-A") plt.scatter(x1, y1, label="label-B") plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend(loc='upper right', bbox_to_anchor=(0., 1.02, 1., .102), borderaxespad=0., ncol=2, shadow=True, mode="expand")
グラフの枠外に表示する
bbox_to_anchor
を調整して決定します.
https://matplotlib.org/users/legend_guide.htmlmatplotlib.org
bbox_to_anchor
の指定例は matplotlibドキュメントにも例がありますのでそちらも参考にしてください.
plt.title("moon") plt.scatter(x0, y0, label="label-A") plt.scatter(x1, y1, label="label-B") plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend(loc='upper right', bbox_to_anchor=(1.05, 0.5, 0.5, .100), borderaxespad=0.,)
凡例にタイトルをつける
title
で指定します.
plt.title("moon") plt.scatter(x0, y0, label="label-A") plt.scatter(x1, y1, label="label-B") plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend(loc='upper right', bbox_to_anchor=(1.05, 0.5, 0.5, .100), borderaxespad=0., ncol=1, mode="expand", title="LABEL NAME")
凡例を分割して別々に表示する
多少面倒ですが, ax = plt.gca().add_artist(legend_p1)
の箇所で新しく凡例を表示するように用意をしています.
handles=[p3]
が p3
に対応するラベルを表示するように指定する箇所で、リスト形式で複数指定ができます.
plt.title("moon") p1 = plt.scatter(x0, y0, label="label-A") p2 = plt.scatter(x1, y1, label="label-B") p3 = plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") legend_p1 = plt.legend(handles=[p1], loc=1, title="LABEL NAME") ax = plt.gca().add_artist(legend_p1) legend_p2 = plt.legend(handles=[p2], loc=2, title="LABEL NAME") ax = plt.gca().add_artist(legend_p2) legend_p3 = plt.legend(handles=[p3], loc=3, title="LABEL NAME")
ラベル名を任意の文字列に付け替える
ラベルをつけるデータ([p1, p2, p3]
)と, それに対応するラベル名(["wa~i!", "sugo~i!", "nande?"]
)を渡すことで表示を変えます.
plt.title("moon") p1 = plt.scatter(x0, y0, label="label-A") p2 = plt.scatter(x1, y1, label="label-B") p3 = plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend([p1, p2, p3], ["wa~i!", "sugo~i!", "nande?"], loc=1, title="LABEL NAME")
凡例の大きさ, フォントサイズ, 行間のスペースを変える
prop={'size':12,}
にて大きさを指定、数が大きいほど大きくなります.
fontsize=20
にてフォントサイズを指定します.
labelspacing=1.25
にて行間のスペースを変更します.
plt.figure(figsize=(15, 5)) plt.subplot(131) plt.title("moon") p1 = plt.scatter(x0, y0, label="label-A") p2 = plt.scatter(x1, y1, label="label-B") p3 = plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend([p1, p2, p3], ["wa~i!", "sugo~i!", "nande?"], fontsize=20, loc=1, title="LABEL NAME", prop={'size':6}) plt.subplot(132) plt.title("moon") p1 = plt.scatter(x0, y0, label="label-A") p2 = plt.scatter(x1, y1, label="label-B") p3 = plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend([p1, p2, p3], ["wa~i!", "sugo~i!", "nande?"], fontsize=20, loc=1, title="LABEL NAME", prop={'size':8,}) plt.subplot(133) plt.title("moon") p1 = plt.scatter(x0, y0, label="label-A") p2 = plt.scatter(x1, y1, label="label-B") p3 = plt.scatter(x2, y2, label="label-C") plt.xlabel("X-LABEL") plt.xlabel("Y-LABEL") plt.legend([p1, p2, p3], ["wa~i!", "sugo~i!", "nande?"], fontsize=20, loc=1, title="LABEL NAME", labelspacing=1.25, prop={'size':12,})
その他の可視化例
株価データのプロット
以下の動画を参照してください。
決定木(分類)の可視化
以下のページを参照して下さい。
決定木(回帰)の可視化
dtreevizを使用します。 以下のページを参照して下さい。