Pythonによるデータ処理20 ~ 複雑なグラフを生成する関数プロット
今回は、複雑なグラフを生成する関数をPythonでプロットしたものを紹介する。
1. ハート型
プロットする関数は以下の通り:
aをパラメータとしてプロットするとハートの範囲が変わっていく。a=0の場合は、sin2xとなるため、ただの三角関数のプロットになる。
import numpy as np import matplotlib.pyplot as plt x=np.arange(-20,20,1e-3) plt.figure(figsize=(20,15)) i=1 for a in np.arange(-10,11,1): y=((np.tan(x)+np.sin(a*x**2))*np.cos(x))**2 plt.subplot(21,1,i) plt.plot(x,y,'m') plt.text(-20,0,'a=' + str(a),backgroundcolor='white') i=i+1
2. 波紋
次は波紋状の模様を生成する関数:
今回はyについて表現しにくい陰関数をプロットする方法として、3次元のコンタープロットを作成し、Z=0と交わる等高線を表示する。
X,Yのメッシュグリッドを生成し、上の式を変形し Z=np.cos(a*X-Y)-np.sin(X**2+b*Y**2)
として、plt.contour(X, Y, Z, [0])
でZ=0の等高線を描画する。
delta = 0.01 xrange = np.arange(-5, 5, delta) yrange = np.arange(-5, 5, delta) X, Y = np.meshgrid(xrange,yrange) i=1 plt.figure(figsize=(12,12)) for d in np.arange(-8,8,1): a=d b=d Z=np.cos(a*X-Y)-np.sin(X**2+b*Y**2) plt.subplot(4,4,i) plt.contour(X, Y, Z, [0]) plt.axis('equal') plt.text(-6,4,'a='+str(a),backgroundcolor='white') plt.text(-6,3,'b='+str(b),backgroundcolor='white') i=i+1
パラメータa,bが負のときは双曲線、正のときは放物線として振舞うことがわかる。
3. 波線模様
最後は、パラメータによって変化する波線模様:
波紋の時と同様に陰関数をプロットするためコンタープロットを利用する。
a=np.arange(12,-12,-2) b=np.arange(50,200,10) delta = 0.1 xrange = np.arange(-25, 25, delta) yrange = np.arange(-25, 25, delta) X, Y = np.meshgrid(xrange,yrange) plt.figure(figsize=(12,12)) i=1 for a, b in zip(a,b): Z=a*X*np.cos(Y)-b*np.cos(X) plt.subplot(4,4,i) plt.contour(X, Y, Z, [0]) plt.axis('equal') plt.text(-15,15,'a='+str(a),backgroundcolor='white') plt.text(-15,10,'b='+str(b),backgroundcolor='white') i=i+1
a=0の時はb cos(x)=0となるため、x=nπ/2の位置で直線(縦線)となるが、それ以外ではa,bの値によって波線が変化していく。
4. まとめ
今回は複雑なグラフを生成する関数をPythonでプロットした結果とコードを紹介した。