pythonのmatplotlibでsin nθのグラフを描く
$${\sin n\theta}$$を作成します。$${\sin 2\theta}$$から始まり3つ、つまり$${\sin 4\theta}$$までのグラフを作成するために、はじまりの倍数をstart、グラフの本数をnumberとして指定します。
import numpy as np
import matplotlib.pyplot as plt
N = 1000
theta = np.linspace(-2*np.pi, 2*np.pi, N)
start = 2
number = 3
fig ,ax = plt.subplots()
plt.rcParams["figure.figsize"] = (6, 4)
ax.set_title( 'sin'+str(start)+'θからsin'+str(start+number-1)+'θのグラフ', loc = 'center', pad=30, fontname="MS Gothic", fontsize = 24)
for i in range(number):
ax.plot(theta, np.sin(theta*(start+i)), linewidth=1, label= 'sin'+str(start+i)+r'$\theta$')
ax.set_xticks([-2*np.pi,-1.5*np.pi, -np.pi,-0.5*np.pi,0,0.5*np.pi, np.pi,1.5*np.pi, 2*np.pi])
ax.set_xticklabels( [ '-2π',r'$-\frac{3}{2} \pi$' ,'-π', r'$-\frac{π}{2} \pi$','',
r'$\frac{π}{2} \pi$','π', r'$\frac{3}{2} \pi$', '2π'])
ax.set_xlabel(r'$\theta$', loc = 'right', labelpad=-30)
ax.set_yticks([-1, -1/2**0.5, -0.5, 0,0.5, 1/2**0.5,1])
ax.set_yticklabels( [ '-1', r'$-\frac{1}{\sqrt{2}}$',r'$-\frac{1}{2}$', '0',r'$\frac{1}{2}$',r'$\frac{1}{\sqrt{2}}$','1'])
ax.spines['left'].set_position('zero')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.legend( bbox_to_anchor=(1, 0.2))
ax.grid(which = 'major', axis = 'x', color = 'green', alpha = 0.8,
linestyle = '--', linewidth = 0.5)
ax.grid(which = 'major', axis = 'y', color = 'green', alpha = 0.8,
linestyle = '--', linewidth = 0.5)
plt.show()
ごちゃごちゃとしたグラフになってしまいますが、$${\theta}$$の倍数が大きくなると、一巡する周期が短くなることが見て取れます。
$${\thetaの倍数を50}$$とすると、11行目のように折れ線グラフの線の太さ(linewidth)を0.1としても、塗り物したようなグフラフになってしまいます。
import numpy as np
import matplotlib.pyplot as plt
N = 50
theta = np.linspace(-2*np.pi, 2*np.pi, N)
start = 50
number = 1
fig ,ax = plt.subplots()
plt.rcParams["figure.figsize"] = (6, 4)
ax.set_title( 'sin'+str(start)+'θからsin'+str(start+number-1)+'θのグラフ', loc = 'center', pad=30, fontname="MS Gothic", fontsize = 24)
for i in range(number):
ax.plot(theta, np.sin(theta*(start+i)), linewidth=1, label= 'sin'+str(start+i)+r'$\theta$')
ax.set_xticks([-2*np.pi,-1.5*np.pi, -np.pi,-0.5*np.pi,0,0.5*np.pi, np.pi,1.5*np.pi, 2*np.pi])
ax.set_xticklabels( [ '-2π',r'$-\frac{3}{2} \pi$' ,'-π', r'$-\frac{π}{2} \pi$','',
r'$\frac{π}{2} \pi$','π', r'$\frac{3}{2} \pi$', '2π'])
ax.set_xlabel(r'$\theta$', loc = 'right', labelpad=-30)
ax.set_yticks([-1, -1/2**0.5, -0.5, 0,0.5, 1/2**0.5,1])
ax.set_yticklabels( [ '-1', r'$-\frac{1}{\sqrt{2}}$',r'$-\frac{1}{2}$', '0',r'$\frac{1}{2}$',r'$\frac{1}{\sqrt{2}}$','1'])
ax.spines['left'].set_position('zero')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.legend( bbox_to_anchor=(1, 0.2))
ax.grid(which = 'major', axis = 'x', color = 'green', alpha = 0.8,
linestyle = '--', linewidth = 0.5)
ax.grid(which = 'major', axis = 'y', color = 'green', alpha = 0.8,
linestyle = '--', linewidth = 0.5)
plt.show()
ちなみに、3行目のN=1000はx軸の−2𝜋−2πから2𝜋2πの間を1000個に区切り、各点を結び付けてグラフにすることにしていますが、これを100にしてしまうと、おかしなグラフになってしまうので注意が必要です。
import numpy as np
import matplotlib.pyplot as plt
N = 1000
theta = np.linspace(-2*np.pi, 2*np.pi, N)
start = 50
number = 1
fig ,ax = plt.subplots()
plt.rcParams["figure.figsize"] = (6, 4)
ax.set_title( 'sin'+str(start)+'θからsin'+str(start+number-1)+'θのグラフ', loc = 'center', pad=30, fontname="MS Gothic", fontsize = 24)
for i in range(number):
ax.plot(theta, np.sin(theta*(start+i)), linewidth=1, label= 'sin'+str(start+i)+r'$\theta$')
ax.set_xticks([-2*np.pi,-1.5*np.pi, -np.pi,-0.5*np.pi,0,0.5*np.pi, np.pi,1.5*np.pi, 2*np.pi])
ax.set_xticklabels( [ '-2π',r'$-\frac{3}{2} \pi$' ,'-π', r'$-\frac{π}{2} \pi$','',
r'$\frac{π}{2} \pi$','π', r'$\frac{3}{2} \pi$', '2π'])
ax.set_xlabel(r'$\theta$', loc = 'right', labelpad=-30)
ax.set_yticks([-1, -1/2**0.5, -0.5, 0,0.5, 1/2**0.5,1])
ax.set_yticklabels( [ '-1', r'$-\frac{1}{\sqrt{2}}$',r'$-\frac{1}{2}$', '0',r'$\frac{1}{2}$',r'$\frac{1}{\sqrt{2}}$','1'])
ax.spines['left'].set_position('zero')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.legend( bbox_to_anchor=(1, 0.2))
ax.grid(which = 'major', axis = 'x', color = 'green', alpha = 0.8,
linestyle = '--', linewidth = 0.5)
ax.grid(which = 'major', axis = 'y', color = 'green', alpha = 0.8,
linestyle = '--', linewidth = 0.5)
plt.show()
この記事が気に入ったらサポートをしてみませんか?