見出し画像

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()



この記事が気に入ったらサポートをしてみませんか?