【Matlotlib】Python Matplotlib基礎のキ(グラフの書き方・figとplt、axes関係・複数グラフ、体裁を整える)
こんにちは。
今日はMatplotlibの基礎のキということではじめてMatplotlibを用いてグラフを描く人向けの記事です。
難しい用語は使っていませんので、初心者向けです。
モジュール
まずはグラフ描写に必要なmatplitlib.pyplotをインポートします
慣習的にpltと略します(as plt)
import matplotlib.pyplot as plt
データをプロットしてみよう
まずは基本的なデータをプロットしてみます
import numpy as np
x = np.arange(0,10,1)
y = x*2
plt.plot(x, y)
plt.show()
※np.arange(開始, 終了,間隔)で連続した配列を作成できる
※plt.plot(x, y)で線グラフが描けます。
※plt.show()でグラフを表示します。
figとplt, axの関係
グラフはplt.plot(x, y)で簡単に描写できますが、さらに高度なグラフ(複数グラフを1つにまとめるなど)を書くには限界があります(パワポでできた図を付けたりするのは大変です。) そこで、大枠をfigとし、内側にaxを作ることで複数のグラフも表現できます。
サブプロットであるaxesは以下のコードで作成できます。
fig = plt.figure(figsize=(5, 5)) #figをインスタンス化とサイズの決定
ax = fig.add_subplot(111) #axをfigの中に作成(axが1つのグラフの時は111)
#タイトルの設定
ax.set_title("Title")
#プロットとラベルの設定(後で凡例にできる)
ax.plot(x, y, label="data")
#凡例の表示
plt.legend()
#グラフの保存、formatをpngに、dpiは解像度
fig.savefig("XXX.png" ,format="png", dpi=300)
plt.show()
※fig.add_subplot(111)は(横,縦,グラフの番号)で決められる。詳細は複数グラフへ。
複数グラフ
axを使って複数グラフを作成します。
axが複数でるため、fig.add_subplot()の括弧内の数字を変える必要があります。
例1ー基本
まずはfigの中にグラフを2つ表示します。
figの大きさはx軸10とy軸5、axは横に2つ並べます
#データ
x1 = np.arange(0,10,1)
y1 = x1*2
x2 = np.arange(0,10,1)
y2 = x2*3
fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(121)
ax1.set_title("Title1")
ax2 = fig.add_subplot(122)
ax2.set_title("Title2")
ax1.plot(x1, y1)
ax2.plot(x2, y2)
plt.show()
例2ー応用(forループを使う)
次はループを回して、グラフを描写します。
fig, axes = plt.subplots(nrows=4, ncols=3,figsize=(20,15))
plt.suptitle("Title")
#ここから12個グラフ
for i, ax in enumerate(axes.flat):
#i番目のaxを用意
ax = plt.subplot(3, 4, i+1)
#データ(yのデータは100個のランダムな数字を2倍した値)
xdata = np.arange(0,100,1) *1
ydata = np.random.rand(100) *2
#描写
ax.plot(xdata, ydata)
ax.set_title(i+1)
plt.show()
グラフの体裁
グラフの描写において欠かせないのが全体の見栄えです。文字の大きさがバラバラだったり、軸が適切に書かれていなかったり、範囲が不適切であったりすると、グラフを見ている人に誤解を招くことになってしまいます。
Point
- フォントの統一(Arial や TimesNewRomanなど)
- フォントサイズを適切に(見やすい大きさや統一性)
- タイトルや軸ラベルの設定
- メモリの設定
- 軸の範囲設定
x = np.arange(0,10,1)
y = x*2
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)
plt.rcParams["font.size"] = 18 #フォントサイズの一括設定
ax.set_title("Title")
ax.plot(x, y, label="data")
#軸範囲
ax.set_xlim(0, 10) #x軸
ax.set_ylim(0, 20) #y軸
#軸ラベル
ax.set_xlabel("X-axis") #x軸
ax.set_ylabel("Y-axis") #y軸
#メモリの詳細設定
ax.minorticks_on() #補助メモリ(小さいメモリ)を表示する
#主目盛りの設定、axisはbothでxy軸、majorが主目盛り、top・right・left・bottomで軸の表示設定ができる
ax.tick_params(axis="both", which="major",direction="in",length=5,width=2,top="on",right="on")
ax.tick_params(axis="both", which="minor",direction="in",length=2,width=1,top="on",right="on")
#凡例の表示
plt.legend()
plt.show()
それでは