ねるねるねるねをねらずにくうぜ

C とかC++(予定)とかpythonとかgnuplotとかmatlabとかmathematicaとか書く予定ですが、最終的にはねるねるねるねをねらずに食うことを目標にしているブログです

matplotlib でのプロットのお話

  • 基本的にipython notebookの環境を想定してます 随時追加していきます

基本的なPlot


いつも私が使っているプロットの仕方のテンプレを書いておきます。 ちょっと違うのは、いつもsubplotsを使っていることですかね。 複数図が並べやすいです。

%matolotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0,10,.1)
y = np.sin(x)

fig, ax = plt.subplots(figsize=(10,7.5))
ax.plot(x,y)
fig.savefig('figure1.png')

タイトルやラベル、文字の大きさ


先ほどのプロットに続けて、

ax.set_xlabel(r'$\theta$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
ax.tick_params(labelsize=14)
ax.set_title(r'$y = \sin \theta$',fontsize=18)

  • "fontsize" で文字の大きさ指定
  • "tick_params"は軸文字の設定
    • "labelsize"であることに注意
  • latex 形式の表記が使える!
    • 特殊文字(θなど)を使うときは、"\"がエスケープ文字で無いことを示すために、クォーテーションの前に'r'をつけよう

複数図のプロット


figがキャンバス、axが軸フレームだったので、そこを修正してあげると一枚のキャンバスに複数の図がプロットできる

fig, [ax1,ax2] = plt.subplots(1,2,figsize=(20,7.5))
ax1.plot(x,y)
ax2.plot(y,x)
fig.savefig('figure1.png')

fig, [ax1,ax2] = plt.subplots(2,1,figsize=(20,7.5))
ax1.plot(x,y)
ax2.plot(y,x)
fig.savefig('figure1.png')

複数図の軸のスケールを合わせたいときには、"sharey" "sharex"を使おう。

fig, [ax1,ax2] = plt.subplots(1,2,sharey=True,figsize=(20,7.5))
ax1.plot(x,y)
ax2.plot(y,x)
fig.savefig('figure1.png')

fig, [ax1,ax2] = plt.subplots(2,1,sharex=True,figsize=(20,7.5))
ax1.plot(x,y)
ax2.plot(y,x)
fig.savefig('figure1.png')

補足

あまりmatplotlibに慣れていない人向けに書きますと、

  • "fig" はプロットのためのキャンバス
  • "ax"はプロットするための軸等が入ったフレーム

と言ったところです。

それぞれは自由に名前を決めることができて、"fig_sin" "ax_sin"などのようにしてもいいです。

ax.plot(x,y)

というのは、"ax" という軸について、"plot"という操作をする、という意味だと考えるとわかりやすいかもしれません。

また、余談ですが、ipython notebookでは

%matplotlib inline

をすると、ブラウザのページ上にプロットが表示されます。 これをしていない場合、

plt.show()

が必要で、この操作によって別窓(python)でグラフが表示されます。