【python3・覚書】よく忘れるpythonのmatplotlibの書き方一覧

よく忘れるpython3のmatplotlibの書き方の自分用の覚書。随時更新。

x軸、y軸の表記やらメモリやら色々変える

数値じゃなくてサンプル名(文字)なんかでプロットする

なぜかたまに忘れる。そのまま文字列のarrayなりリストなりをX軸にすればいい。

X1 = np.array(['a1','b1','c2','a2','c3'])

対数軸でプロット(log-log plot)

plt.xscale("log")
plt.yscale("log")

対数軸がごちゃつく場合は表示するサブメモリをsubsxで指定できる。

plt.xscale("log",subsx=[0.02,0.04,0.06,0.08])

対数軸でプロットした後にメモリの数値表記スタイルを小数点表記(0.01など)に変える

plt.gca().xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
plt.gca().xaxis.set_minor_formatter(matplotlib.ticker.ScalarFormatter())

一応これでいけるけど、表示の微修正が必要なこともあるかも。例えば小数点単位を変えるなら同じ感じで……

plt.gca().xaxis.set_minor_formatter(matplotlib.ticker.FormatStrFormatter('%.g'))

など。表記変更はsubplotを使った方が簡単に調整できそうな印象。試してないけど。

軸のメモリの表示を回転

matplotlibの設定を変える場合。

plt.xticks(rotation =70)

subplotを変えたい場合。

色々あるけど……

ax1.tick_params(labelrotation=70)

2021年1月19日追記: これだとy軸のラベルも回転するな。

ax1.tick_params('x',labelrotation=70)

これでX軸だけ回転する。

軸のメモリの有無など

tick_paramsでセット。

ax2.tick_params(axis ='x', which ='both', top='off',bottom='off', pad=10)

軸メモリを任意の場所に手動でセット

plt.xticks([0.5,3,10,12],['0.5','3','10','12'])

特殊文字やテキスト表記

文字のアウトプットの時のアポストロフィ(’)の入れ方

ax1.set_ylabel('Young\'s Modulus',fontname='Arial')
ax1.set_ylabel("Young's Modulus",fontname='Arial')

下付き文字・上付き文字

ax2.set_ylabel('r"L$_{s}$"')
ax2.set_ylabel('r"L$^{s}$"')

プロットの仕方

たくさんプロットするときの順番を指定

重ね合わせの順番が重要な時には、zorderが使える。

plt.plot(x,y,zorder=0)
plt.plot(x,y,zorder=5)

便利プロット設定

テンプレその1、よく使う、マーカー、カラー、塗りつぶし

marker = ['o','x','D','v','+']
colour = ['c','m','g','orange','b']
fill = ['none','full','none','full','none']
for i in range(num):
  data = plots[i]
  plt.plot(data[lin1:lin2,0],data[lin1:lin2,1], marker[i],color=colour[i],fillstyle=fill[i],ms=8)

テンプレその2、アルファ値、スケール、描画の順番など

def plot_raw(plots,num1,num2):
num = len(plots)
marker = ['o','x','D','v','+']
colour = ['c','m','g','orange','b']
line = ['','','','','']
linewidth = [4,4,4,4,4]
fill = ['none','none','none','none','none']
alpha = [1,1,1,1,1]
scale = [1,1,1,1,1]
ms = [8,8,8,8,8]
zorder = [5,0,10,15,20]
        for i in range(num):
                data = plots[i]
                plt.plot(data[lin1:lin2,0],data[lin1:lin2,1]/scale[i], marker[i],color=colour[i],fillstyle=fill[i],ms=ms[i],alpha=alpha[i],ls=line[i],lw=linewidth[i],zorder=zorder[i])
        return

忘れた時に随時更新の予定。更新も忘れそうだけど。

関連記事

1. pythonのまとめ

D