import numpy as np import matplotlib.pyplot as pltSciencePlotsをインストール(pip install SciencePlots)した環境で,スタイルファイルを指定してmatplotlibのスタイル変更します.
import scienceplots #Warning : As of version 2.0.0, you need to add import scienceplots before setting the style (plt.style.use('science')). plt.style.use(['science', 'notebook'])関数 $y= \sin(x)$ を計算して出力します.
q = 180.0/np.pi nx = 7 # 計算点数 print(f"{'x [deg]':>8s} {'sin(x)':>10s}") dx = 15.0/q for i in range(nx): x = i*dx print(f"{x*q:8.2f} {np.sin(x):10.5f}")
x [deg] sin(x) 0.00 0.00000 15.00 0.25882 30.00 0.50000 45.00 0.70711 60.00 0.86603 75.00 0.96593 90.00 1.00000リスト内包表記で横並びの出力をしてみよう.
nx2 = 6 xx = np.linspace(0.0, 90.0/q, nx2) print(f"{'x [deg]:':>10s}",end=' ') [print(f"{xx[i]*q:8.5f}",end=' ') for i in range(nx2)] # リスト内包表示 print("") print(f"{'sin(x):':>10s}",end=' ') [print(f"{np.sin(xx[i]):8.5f}",end=' ') for i in range(nx2)]
x [deg]: 0.00000 18.00000 36.00000 54.00000 72.00000 90.00000 sin(x): 0.00000 0.30902 0.58779 0.80902 0.95106 1.00000matplotlibで作図します.
xx2 = np.linspace(0.0, 360.0/q, 91) yy2 = np.sin(xx2) plt.plot(xx2,yy2) plt.show()SciencePlotsを使用した場合,
fig = plt.figure() # グラフ領域の作成 plt.plot(xx2,yy2) fig.savefig('sin.pdf')作図に用いた計算値を出力すると,
print(f"{'No.':>3s} {'x [deg]':>8s} {'sin(x)':>10s}") for i,x in enumerate(xx2): print(f"{i+1:3.0f} {x*q:8.2f} {yy2[i]:10.5f}")
No. x [deg] sin(x) 1 0.00 0.00000 2 4.00 0.06976 3 8.00 0.13917 4 12.00 0.20791 5 16.00 0.27564 6 20.00 0.34202 7 24.00 0.40674 8 28.00 0.46947 9 32.00 0.52992 10 36.00 0.58779 11 40.00 0.64279 12 44.00 0.69466 13 48.00 0.74314 14 52.00 0.78801 15 56.00 0.82904 16 60.00 0.86603 17 64.00 0.89879 18 68.00 0.92718 19 72.00 0.95106 20 76.00 0.97030 21 80.00 0.98481 22 84.00 0.99452 23 88.00 0.99939 24 92.00 0.99939 25 96.00 0.99452 26 100.00 0.98481 27 104.00 0.97030 28 108.00 0.95106 29 112.00 0.92718 30 116.00 0.89879 31 120.00 0.86603 32 124.00 0.82904 33 128.00 0.78801 34 132.00 0.74314 35 136.00 0.69466 36 140.00 0.64279 37 144.00 0.58779 38 148.00 0.52992 39 152.00 0.46947 40 156.00 0.40674 41 160.00 0.34202 42 164.00 0.27564 43 168.00 0.20791 44 172.00 0.13917 45 176.00 0.06976 46 180.00 0.00000 47 184.00 -0.06976 48 188.00 -0.13917 49 192.00 -0.20791 50 196.00 -0.27564 51 200.00 -0.34202 52 204.00 -0.40674 53 208.00 -0.46947 54 212.00 -0.52992 55 216.00 -0.58779 56 220.00 -0.64279 57 224.00 -0.69466 58 228.00 -0.74314 59 232.00 -0.78801 60 236.00 -0.82904 61 240.00 -0.86603 62 244.00 -0.89879 63 248.00 -0.92718 64 252.00 -0.95106 65 256.00 -0.97030 66 260.00 -0.98481 67 264.00 -0.99452 68 268.00 -0.99939 69 272.00 -0.99939 70 276.00 -0.99452 71 280.00 -0.98481 72 284.00 -0.97030 73 288.00 -0.95106 74 292.00 -0.92718 75 296.00 -0.89879 76 300.00 -0.86603 77 304.00 -0.82904 78 308.00 -0.78801 79 312.00 -0.74314 80 316.00 -0.69466 81 320.00 -0.64279 82 324.00 -0.58779 83 328.00 -0.52992 84 332.00 -0.46947 85 336.00 -0.40674 86 340.00 -0.34202 87 344.00 -0.27564 88 348.00 -0.20791 89 352.00 -0.13917 90 356.00 -0.06976 91 360.00 -0.00000
【例題1】 $y=\frac{1+\cos(x)}{2}$ をプロットせよ(SciencePlotsを使用). $x$軸,$y$軸のラベルにtexを使ってみよう.
xx_deg = np.linspace(-180.0, 180.0, 91) # [deg] xx_rad = xx_deg/q fig = plt.figure() # グラフ領域の作成 plt.xlabel(r"$x*\frac{180}{\pi}$ [deg]") # x軸のラベル設定 plt.ylabel(r"$\frac{1+\cos(x)}{2}$") # y軸のラベル設定 plt.plot(xx_deg, (1+np.cos(xx_rad))/2) fig.savefig('cos1.pdf') plt.show()
【例題2】 $y=\frac{1+\cos(x)}{2}$ および$+x$方向に$\pi/4$,$\pi/2$ずらした波形をプロットせよ. 凡例(デフォルトの設定)も示すこと.
fig = plt.figure() # グラフ領域の作成 plt.xlabel(r"$x*\frac{180}{\pi}$ [deg]") # x軸のラベル設定 plt.ylabel(r"$y$") # y軸のラベル設定 plt.plot(xx_deg, (1+np.cos(xx_rad))/2, label=r"$y=\frac{1+\cos(x)}{2}$") plt.plot(xx_deg, (1+np.cos(xx_rad-np.pi/4))/2, label=r"$y=\frac{1+\cos(x-\pi/4)}{2}$") plt.plot(xx_deg, (1+np.cos(xx_rad-np.pi/2))/2, label=r"$y=\frac{1+\cos(x-\pi/2)}{2}$") plt.legend() fig.savefig('cos3.pdf') plt.show()
【例題3】 $y=\tanh (x), \sinh(x), \cosh(x)$ をプロットせよ. グリッドをつけて,凡例も示すこと.
グリッドに凡例が隠れないように,xx3 = np.linspace(-2, 2, 61) fig = plt.figure() # グラフ領域の作成 plt.grid(color = "gray", linestyle="--") plt.xlabel("$x$ [rad]") # x軸のラベル設定 plt.ylabel("$y$") # y軸のラベル設定 plt.plot(xx3, np.tanh(xx3), label=r"$\tanh(x)$") plt.plot(xx3, np.sinh(xx3), label=r"$\sinh(x)$") plt.plot(xx3, np.cosh(xx3), label=r"$\cosh(x)$") plt.legend(ncol=1, loc='lower right', fancybox=False, frameon=True) fig.savefig('hyperbolic2.pdf') plt.show()