基本的な使い方
Axesは慣れるのに時間がかかりそう
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot([1,2],[1,2])
plt.show()
点を打つ
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot([1,2],[1,2],marker="o")
線のスタイルを変える
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot([1,2],[1,2],linestyle="dashed",color="tab:orange")
線の太さ、点の大きさを変える
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot([1,2],[1,2],marker="o",linewidth=3,markersize=15)
軸に名前を付ける
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot([1,2],[0,24])
ax.set_xlabel("day",labelpad=5)
ax.set_ylabel("hour",labelpad=10)
サイズと範囲指定
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(10,4))
ax=fig.add_subplot(111)
ax.plot([1,2],[1,2])
ax.set_xlim(1,5)
ax.set_ylim(0,3)
凡例を付ける
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,10,100)
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.sin(t),label="sin(t)")
ax.plot(t,np.cos(t),label="cos(t)")
ax.legend()
任意の場所に文字を入れる
transform=ax.transAxesを付けると、グラフ上の座標ではなく、グラフ枠に対する座標を指定できる。
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,10,100)
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.sin(t),label="sin(t)")
ax.text(0.02,0.95,"(a)",transform=ax.transAxes)
ax.set_xlabel("t")
左右の軸を使う
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,10,100)
fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.plot(t,np.sin(t),color="tab:blue")
ax1.set_xlabel("t")
ax1.set_ylabel("sin(t)")
ax2=ax1.twinx()
ax2.plot(t,np.tan(t),color="tab:orange")
ax2.set_ylim(-10,10)
ax2.set_ylabel("tan(t)")
左右の軸を使い、共通の凡例を付ける
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,10,100)
fig=plt.figure()
ax1=fig.add_subplot(111)
ln1=ax1.plot(t,np.sin(t),color="tab:blue",label="sin(t)")
ax1.set_xlabel("t")
ax1.set_ylabel("sin(t)")
ax2=ax1.twinx()
ln2=ax2.plot(t,np.tan(t),color="tab:orange",label="tan(t)")
ax2.set_ylim(-10,10)
ax2.set_ylabel("tan(t)")
ln=ln1+ln2
lab=[l.get_label() for l in ln]
ax2.legend(ln,lab,loc=4)
ファイルの保存
dvipngとcm-superをインストールしておく
sudo apt update
sudo apt install cm-super
sudo apt install dvipng
plt.savefig("hoge.pdf")
余白を最小にするには
plt.savefig("hoge.pdf",bbox_inches="tight",pad_inches=0)
pad_inchesは0にするとpngなどのときにぎりぎり切れることがある。その場合小さい値を入れる。透明を背景にするにはtransparent=Trueを入れる。
LaTeX仕様
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,5,100)
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.exp(-t)*np.sin(t))
ax.set_title(r"$x=e^{-t} \sin 5t$")
ax.set_xlabel(r"$t$")
ax.set_ylabel(r"$x$")
完全LaTeX仕様
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,5,100)
mpl.rc("text",usetex=True)
mpl.rcParams["text.latex.preamble"]= r"\usepackage{cmbright,amsmath,amssymb}"
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.exp(-t)*np.sin(t))
ax.set_title(r"$x=e^{-t} \sin 5t$")
ax.set_xlabel(r"$t$")
ax.set_ylabel(r"$x$")
フォントサイズの変更
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,5,100)
mpl.rcParams["font.size"]=16
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.exp(-t)*np.sin(t))
ax.set_title(r"$x=e^{-t} \sin 5t$")
ax.set_xlabel(r"$t$")
ax.set_ylabel(r"$x$")
日本語を使用する
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,5,100)
mpl.rcParams["font.family"]="IPAexGochic"
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.exp(-t)*np.sin(t))
ax.set_title(r"$x=e^{-t} \sin 5t$のグラフ")
ax.set_xlabel("時間")
ax.set_ylabel("減衰振動")
LaTeX仕様で日本語を使用する
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
t=np.linspace(0,5,100)
mpl.rc("text",usetex=True)
mpl.rcParams["text.latex.preamble"]= r"\usepackage{cmbright,amsmath,amssymb}" r"\usepackage[whole]{bxcjkjatype}"
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(t,np.exp(-t)*np.sin(t))
ax.set_title(r"$x=e^{-t} \sin 5t$のグラフ")
ax.set_xlabel("時間")
ax.set_ylabel("減衰振動")
バイナリファイルの読み込み
import numpy as np
f=open("hoge.bin")
data=np.fromfile(f,dtype="f8",sep="")
アスキーファイルの読み込み
アスキーファイルはnumpy.loadtxtやnumpy.genfromtxtよりもpandas.read_tableの方が割と賢く読み込んでくれる気がする。必要であればその後、numpy.arrayで配列に。
import numpy as np
import pandas as pd
data=pd.read_table("hoge.dat",sep="\s+",header=None)
data=np.array(data)