Matplotlibの便利な機能

2021年9月6日

Matplotlibはとっても便利なんですが、機能がありすぎて大変です。少しずつまとめていきたいと思います。

グラフ作成時の便利な機能

subplot グラフを分ける

グラフを分けて描く時はsubplotを使います。

書き方

subplot( 行, 列, 表示する場所, sharex,sharey )

sharexx軸を他のグラフと揃える
shareyy軸を他のグラフと揃える
【例】
subplot( 2, 3, それぞれの番号 )
2行3列の場合、表示する場所は下記の番号に対応します。

subplots 詳細

【例】
import matplotlib.pyplot as plt
 
plt.subplot(2,3,1)
plt.subplot(2,3,2)
plt.subplot(2,3,3)
plt.subplot(2,3,4)
plt.subplot(2,3,5)
plt.subplot(2,3,6)
【実行結果】

tight_layout グラフの間隔を調整

グラフの間隔を調整します。グラフが重なり合った時などの調整に便利。

書き方

tight_layout( pad=1.08, h_pad=None, w_pad=None, rect=None )

pad(オプション) グラフの周囲の間隔を調整
h_pad(オプション) 上下のグラフの幅を調整
w_pad(オプション) 横のグラフの幅を調整
rect(オプション) 各グラフの端をタプル(left, bottom, right, top)で調整(下記参照)

rectの(left, bottom, right, top)はそれぞれ左下と右上を表している。

【例】
import matplotlib.pyplot as plt
 
ax1= plt.subplot(2,3,1)
ax1.set_xlabel('xlabel1')
ax1.set_ylabel('ylabel1')
 
ax2 = plt.subplot(2,3,2)
ax2.set_xlabel('xlabel2')
ax2.set_ylabel('ylabel2')
 
ax3 = plt.subplot(2,3,3)
ax3.set_xlabel('xlabel3')
ax3.set_ylabel('ylabel3')
 
ax4 = plt.subplot(2,3,4)
ax4.set_xlabel('xlabel4')
ax4.set_ylabel('ylabel4')
 
ax5 = plt.subplot(2,3,5)
ax5.set_xlabel('xlabel5')
ax5.set_ylabel('ylabel5')
 
ax6 = plt.subplot(2,3,6)
ax6.set_xlabel('xlabel6')
ax6.set_ylabel('ylabel6')
 
plt.tight_layout(pad=1.5,rect=(0,0,1,0.8))
【実行結果】

savefig 保存します

グラフをデータに保存します。

書き方

savefig( ファイル名 , [※bbox_inches="tight"] )
※保存したグラフのx軸が切れる場合はtightを指定します。

【例】
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
 
X = np.arange(0,100,0.1)
Y = norm.pdf(X,50,20)
plt.plot(X,Y,color='b')
 
plt.savefig('graph_save.png')
【実行結果】

fill_between 部分的に色をつける

描画したグラフに色をつけてみます。

書き方

fill_between( x, y1, y2, where, alpha )

xx軸の範囲
y1y軸の上側
y2y軸の下側
where塗りつぶす範囲
alpha塗りつぶす色の透過度

fill_betwee 詳細

【例】
上側5%点の面積(確率)を塗りつぶしてみます。
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
 
# 上側5%点
p = norm.ppf( 0.95 , loc=0, scale=1)
# 0から100まで0.1間隔のリスト
X = np.arange(-5,5,0.1)
# 確率密度関数にX,平均0、標準偏差1の標準正規分布
Y = norm.pdf(X,0,1)
 
# 標準正規分布の描画
fig, ax = plt.subplots(1, 1)
ax.plot(X,Y,color='r')
 
y = 0
# 標準正規分布とy=0の直線に挟まれた上側5%点(p)以上の面積(確率)を塗りつぶします
ax.fill_between( X, Y, y, where=X>p)
【実行結果】
【例】
両側を塗りつぶします。
※fill_betweenの引数where句の内容がポイントです。
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
 
# 両側5%点の上側
p_u = norm.ppf( 0.975, loc=0, scale=1)
# 両側5%点の下側
p_d = norm.ppf( 0.025 , loc=0, scale=1)
# 0から100まで0.1間隔のリスト
X = np.arange(-5,5,0.1)
# 確率密度関数にX,平均0、標準偏差1の標準正規分布
Y = norm.pdf(X,0,1)
 
# 標準正規分布の描画
fig, ax = plt.subplots(1, 1)
 
# 目盛りと値を付加
ax.set_xticks([p_d,p_u])
 
ax.plot(X,Y,color='r')
 
y = 0
# 標準正規分布とy=0の直線に挟まれた両側5%点の上側5%点(p_u)以上、両側5%点の下側5%点(p_d)以下の面積(確率)を塗りつぶします
ax.fill_between( X, Y, y, where=(X>p_u)|(X<p_d))
【実行結果】
【例】
信頼区間95%を塗りつぶし
※塗りつぶす範囲をnp.linspaceによりxの範囲を指定し、指定したxの範囲を元にnorm.pdfでyの範囲を指定
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
 
# interval 両側(1-α)%点
down,up = norm.interval(alpha=0.95, loc=0, scale=1)
 
# 0から100まで0.1間隔のリスト
X = np.arange(-5,5,0.1)
 
# 確率密度関数にX,平均0、標準偏差1の標準正規分布
Y = norm.pdf(X,0,1)
 
# 標準正規分布の描画
fig, ax = plt.subplots(1, 1)
 
# 目盛りと値を付加
ax.set_xticks([down,up])
 
ax.plot(X,Y,color='r')
 
# 文字の挿入
ax.text(-1.0, 0.15, "95%", size = 30, color = "white")
    
# 塗りつぶす範囲を指定
filled_x = np.linspace(down,up,1000)
    
y = 0
# 両側5%点(信頼区間95%)を塗りつぶし
ax.fill_between( filled_x, norm.pdf(filled_x,0,1))
【実行結果】

GridSpec 複雑なグラフの配置

グラフを複雑な形状に配置する時はGridSpecを使います。

書き方

GridSpec( nrows, ncols, wspace, hspace )

nrows行数
ncols列数
wspace(オプション)横幅の間隔
hspace(オプション)縦幅の間隔

GridSpec 詳細

【例】
import matplotlib.pyplot as plt
 
grid = plt.GridSpec( 2, 3, wspace=0.4, hspace=0.3 )
 
plt.subplot(grid[0, 0])         # [0,0]にグラフ描画
plt.subplot(grid[0, 1:])        # [0,1][0,2]にグラフ描画
plt.subplot(grid[1, :2])        # [1,0][1,1]にグラフ描画
plt.subplot(grid[1, 2])         # [1,2]にグラフ描画

set_xlim,set_ylim グラフの大きさを指定

グラフのx軸、y軸それぞれの大きさを決めます。

書き方

set_xlim( left, right, auto )
set_ylim( bottom, top, auto )

left,right(オプション)グラフの左右の値を設定
bottom,top(オプション)グラフの上下の値を設定
auto(オプション)グラフの上下左右の値を自動で設定
autoを設定した場合、left,right,bottom,topは無効になる

set_xlim 詳細
set_ylim 詳細

【例】
import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(-3, 3, 0.1)
y = np.sin(x)
 
fig, ax = plt.subplots()
 
ax.set_xlim(-4, 4)
ax.set_ylim(-2, 2)
 
plt.plot(x, y)
【実行結果】

annotate 注釈を入れる

グラフに注釈を入れるにはannotateを使います。

書き方

annotate( text, xy, xytext, arrowprops )

text注釈を入れる文字列
xy注釈の場所又は起点(矢印の先端等)を指定
xytext(オプション)注釈の場所を指定。これを指定した場合はxyは起点になる。
arrowprops(オプション)矢印の使用と大きさの指定。指定は辞書型。
width:矢印の幅指
headwidth:矢印の先端の幅
headlength:矢印の先端の長さ

annotate 詳細

【例】
import numpy as np
import matplotlib.pyplot as plt
 
fig, ax = plt.subplots()
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
 
arrowprops_dict = dict(
                        width=5,
                        headwidth=15,
                        headlength=30,
                        )
ax.annotate("X", xy=(3, 4), xytext=(6, 7), arrowprops=arrowprops_dict,
            color="red", size=40)
 
plt.show()
【実行結果】

grid グラフに目盛線を記載

グラフ内のx軸、y軸に対して目盛線を記載します。

書き方

grid( b=None, which=’major’, axis=’both’, **kwargs )

b(オプション)kwargsを使用するか
which(オプション)目盛線の種類の選択
major:主目盛り線
minor:補助目盛り線
both:両方
axis(オプション)軸の選択 {'both’, 'x’, 'y’}
kwargs(オプション)プロパティによるgridの設定
color:色の設定
alpha:透過の設定
linestyle:線の種類

grid 詳細

【例】
import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(-3, 3, 0.1)
y = np.sin(x)
 
fig, ax = plt.subplots()
 
ax.set_xlim(-4, 4)
ax.set_ylim(-2, 2)
 
plt.plot(x, y)
plt.grid(color="green", alpha = 0.3, linestyle = "--")
【実行結果】

Matplotlib

Posted by Bright_Noah