見出し画像

pythonのmatplotlibでtanのグラフを作成する

tanのグラフをmatplotlibを使って描くためには、少し工夫が必要です。何も工夫をしないと次のようなおかしなグラフになってしまいます。

import numpy as np
import matplotlib.pyplot as plt
N = 100
theta = np.linspace(-2*np.pi, 2*np.pi, N)
tan_ = np.tan(theta)
fig ,ax = plt.subplots()
plt.rcParams["figure.figsize"] = (6, 4)
ax.set_title('tanのグラフ', loc = 'center', pad=30, fontname="MS Gothic", fontsize = 24)
ax.plot(theta, tan_, color='r', linewidth=1,label= r'$\tan \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 = -40)
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))
plt.show()
画像1

そこで次のような工夫をします。

import numpy as np
import matplotlib.pyplot as plt
N = 1000
theta = np.linspace(-2*np.pi, 2*np.pi, N)
tan_ = np.tan(theta)
threshold = 10
tan_[tan_>threshold] = np.inf
tan_[tan_<-threshold] = np.inf
fig ,ax = plt.subplots()
plt.rcParams["figure.figsize"] = (6, 4)
ax.set_title('tanのグラフ', loc = 'center', pad=30, fontname="MS Gothic", fontsize = 24)
ax.plot(theta, tan_, color='r', linewidth=1,label= r'$\tan \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 = -40)
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)
ax.set_ylim([-6, 6])
plt.show()

tanは角度が$${n\pi+\frac{\pi}{2}}$$のときは無限大、$${n\pi-\frac{\pi}{2}}$$のときには-無限大になてしまいます。そこで、6から8行目のように、tanのリストで10を超えたり、-10未満になったときには無限大(inf)の値に置き換えるようにします。

また、22から25行目で補助線を引くようにし、見やすくするとともに、26行目でy軸を-6から6の範囲に限定するようにします。

画像2


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