RuntaScience diary

気象系データを扱う学生 旅が好きです

【Matlotlib】Python Matplotlib基礎のキ(グラフの書き方・figとplt、axes関係・複数グラフ、体裁を整える)

f:id:RuntaScience:20210108094054p:plain

こんにちは。

今日は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()でグラフを表示します。

 

f:id:RuntaScience:20210108091514p:plain

 

figとplt, axの関係

グラフはplt.plot(x, y)で簡単に描写できますが、さらに高度なグラフ(複数グラフを1つにまとめるなど)を書くには限界があります(パワポでできた図を付けたりするのは大変です。) そこで、大枠をfigとし、内側にaxを作ることで複数のグラフも表現できます。

f:id:RuntaScience:20210108071634p:plain

サブプロットである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()

 f:id:RuntaScience:20210108091921p:plain

※fig.add_subplot(111)は(横,縦,グラフの番号)で決められる。詳細は複数グラフへ。

 

複数グラフ

axを使って複数グラフを作成します。

axが複数でるため、fig.add_subplot()の括弧内の数字を変える必要があります。

 例1ー基本

f:id:RuntaScience:20210108092649p:plain

まずは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()

 

f:id:RuntaScience:20210108092515p:plain

 

 

例2ー応用(forループを使う)

 

f:id:RuntaScience:20210108092935p:plain

次はループを回して、グラフを描写します。

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()

 f:id:RuntaScience:20210108092527p:plain

グラフの体裁

 

グラフの描写において欠かせないのが全体の見栄えです。文字の大きさがバラバラだったり、軸が適切に書かれていなかったり、範囲が不適切であったりすると、グラフを見ている人に誤解を招くことになってしまいます。

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()

f:id:RuntaScience:20210108093456p:plain

 

 それでは