目的
-
matplotlib
で図を作成する時、デフォルトのフォントサイズが全般的に小さくてみにくい! -
plt.plot
の各要素のフォントサイズを明示的に変更する方法を把握したい。
matplotlibにおける二つの方式、plt.plot
とax.plot
-
plt.plot
とax
インスタンスを作成した上でax.plot
で描画する方法の二つがある。 -
ここでは、
plt.plot
のmatlab式の方法ではなく、fig, ax = plt.subplots()
でオブジェクト式の手法をお勧めしたい。-
こちらの、「matplotlibにはグラフを作る際に二つの流儀がある」という内容が大変詳しいので読むべきかと思うが、
matplotlib
にはplt.plot
をベースしたmatlab準拠の方法と、ax.plot
をベースとしたオブジェクト指向の方法がある。 -
plt.plot
は個別の要素に対する操作を包み込んだ命令を使用する一方、ax.plot
の方式は、描画するfigureオブジェクト、その中のaxesオブジェクト…と階層的な構造を持つオブジェクト指向の方法。 -
ax.plot
の方が面倒なように感じる。それは図の個別の要素に常に明示的なアクセスを要求するから。 -
このことはやりたいことを実現するための命令を調べないといけなかったり、インスタンスを作成したりする面倒さに起因すると個人的には思う。
-
しかし、その面倒さの原因である、「アクセスしたい要素への明示的な指定を強制される」、ということが、逆に以下のような長所に繋がると個人的には理解している。
- アクセスする方法が分かれば最も直接的なコードの表現になり単純明瞭になる。
- 自分のやりたいことが分からない時は、まずオブジェクトを調べればよく、そのオブジェクトも階層構造に整理されているので手掛かりが得やすい。
- そして対象のオブジェクトが分かれば、そのプロパティ・メソッドなどからAPIなどで調べばよい。
- つまりやりたいことの命令をあてどなく探し回らなくてよく、オブジェクトの枠組みの中で一歩ずつ順序立てて調べることができるようになり時間が節約できる。
-
plt.plot
では全ての個別要素に対する操作ができるわけではない。図の作成のような細かい調整が必要になることが多い場合には、かゆい所に手が届かないこともある。
-
-
ということで、最初から
ax.plot
方式に慣れておいた方がいいと思う。
方法
- x・y軸ラベル、軸の数値、グラフタイトルのフォントサイズなどの設定を行うサンプルを示す。
import matplotlib.pyplot as plt
# オブジェクト指向的matplotlib
## figsizeやtight_layoutが指定できるので積極的に利用しよう
fig, ax = plt.subplots(figsize=(8,5),tight_layout=True)
# 描画
ax.plot([1,2,3],label='line_1')
ax.plot([4,5,6],label='line_2')
# xticklabels,yticklabelsを描画させるため
fig.show()
# 各要素で設定したい文字列の取得
xticklabels = ax.get_xticklabels()
yticklabels = ax.get_yticklabels()
xlabel = 'xaxis_name'
ylabel = 'yaxis_name'
title = 'タイトル'
# 各要素の設定をおこなうsetコマンド
ax.set_xticklabels(xticklabels,fontsize=18, rotation=45)
ax.set_yticklabels(yticklabels,fontsize=18)
ax.set_xlabel(xlabel,fontsize=22)
ax.set_ylabel(ylabel,fontsize=22)
ax.set_title(title,fontsize=30,fontname='IPAexGothic')
# legendはmatplotlib.text.Textのプロパティの設定ができない
ax.legend(loc='upper right',fontsize=18)
ax.grid()
plt.show()
-
まず
ax.plot
などで図を書く。 -
fig.show()
で図を一度書き出す。- この理由は、
fig.show()
を実行していない状態だと、軸の数値を示すxticklabels
およびyticklabels
のオブジェクトを取得するget_xticklabels()
およびget_yticklabels()
に数値が入らないから。 - ただ、
fig.show()
で一旦画像を書き出すことで表示されるようになるのだが…一瞬画面が映るのであまり気持ち良くない。 - 画面に表示することなく内部的に画像を書き出すような命令があれば一瞬画像が表示される問題は解決すると思う。
- しかしそれも現段階では分からなかったので、とりあえず
fig.show()
を実行するこの方法で我慢することにした。
- この理由は、
-
設定したいx,y軸の数値、x軸・y軸ラベルやタイトルに設定する文字を変数に入れる。
-
ax.get_xticklabels()
,ax.get_yticklabels()
はx,y軸の数値文字列リストを取得できるのでこれを利用するのが便利。
-
-
set_
メソッドで文字列及びフォントなどの設定を行う。-
第一引数は、セットする文字列がデフォルトとして設定されている。
-
label
キーワードで渡せば第一引数でなくてもいい。
-
-
x,y軸ラベル、グラフタイトルは通常の文字列を渡す。
-
軸の目盛の文字を示す
xticklabels
およびyticklabels
は文字列のリストを渡す。 -
ここからが本題になるが、表示に関するプロパティを設定することができる。設定できる項目は
matplotlib.text.Text
のプロパティが設定できる。以下によく使いそうなものを列挙する。
-