LoginSignup
8
15

More than 5 years have passed since last update.

備忘録:Pythonでグラフ凡例のサイズを自動調整する方法

Posted at

Pythonガリガリ書いている人には常識のことかもしれないですけど
自分の備忘録として書きます。

セキュリティ上の問題で仕事場のPCからデータを一切抜き出せない...
なので、肝心のグラフを載せられてないのですがご容赦ください。

Pythonでグラフ描画し、pngで保存すると凡例が見切れている場合がある

対策を調査するときの観点

-グラフを予め大きいサイズには設定しない
  今後他のデータを可視化したときに、同じようなことが発生するのを避ける

対策

次のことを試してみました

  • 凡例の文字サイズを小さくする
sample.py
import matplotlib.pyplot as plt

plt.legent(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0, fontsize=8)

結果は...

可視化するデータの種類が多いと、やはり見切れてしまう

  • 凡例の位置を自動にする
sample.py
plt.legent(bbox_to_anchor=(1.05, 1), loc='best', borderaxespad=0)

結果は...

やっぱり見切れちゃう

  • 画像保存時に、"bbox_inches"を指定する
sample.py
plt.savefig('sample.png', bbox_inches='tight')

結果は...見切れてない!
でも、凡例の数が多いと凡例の大きさに比べてグラフがかなり小さく表示されてしまう...

これを回避する方法はないものか...

ということで、次のことを試しました。

  • 凡例を複数列で表示する
sample.py
plt.legent(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0, ncol=2)

"ncol"で凡例の表示列を指定(この場合は2列表示)
まぁまぁ許容範囲の大きさで表示された。

まとめ

ここまで、いろいろ試してきましたが、
最終的には次のことをして、凡例が見切れないようにしました。

  • グラフのサイズ設定処理を削除     ※元々サイズを指定していたんですけど、削除しちゃいました
sample.py
plt.figure(figsize=(14, 6))
  • 凡例を2列で表示
sample.py
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0, ncol=2)
  • 画像出力時に"bbox_inches"属性を設定
sample.py
plt.savefig('sample.png', bbox_inches='tight')

参考URL

pyplot — Matplotlib 2.0.0 documentation

8
15
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
8
15