プログラムの処理中に出てくる数式の意味を理解するために、Pythonでグラフを描いて数式を確認したい。
解決策
numpy
、matplotlib
を使ってグラフを表示する。
折れ線グラフ
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
# BIZ UDGothic https://github.com/googlefonts/morisawa-biz-ud-gothic
matplotlib.rc('font', **{'family': 'BIZ UDGothic'})
x = np.arange(-1 * np.pi, np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.title("sin")
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()
- 実際のグラフ
3次元グラフ
import matplotlib
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
matplotlib.rc('font', **{'family': 'BIZ UDGothic'})
RADIUS = 365
def atan2(x, y):
z = (np.arctan2(-1 * x, y) + np.pi) / (np.pi * 2)
for i in range(x.shape[0]):
for j in range(y.shape[0]):
if (x[i, i] ** 2 + y[j, j] ** 2) ** 0.5 > RADIUS:
z[i][j] = np.nan
return z
x = np.arange(-1 * RADIUS, RADIUS, 1)
y = np.arange(-1 * RADIUS, RADIUS, 1)
xx, yy = np.meshgrid(x, y)
z = atan2(xx, yy)
axes = plt.axes(projection='3d')
axes.plot_surface(xx, yy, z, cmap=cm.hsv)
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_zlabel('atan2')
plt.show()
- 実際のグラフ
まとめ
登場したAPIは以下になる。
モジュール/パッケージ | API | 説明 |
---|---|---|
matplotlib | rc 1 | matplotlibの設定パラメータを更新する。第1引数に設定のグループ名を指定し、更新する設定値をキーワード引数で指定する。 |
matplotlib.pyplot | plot 2 | x,yの座標を線やマーカーとしてプロットする。 |
title 3 | グラフのタイトルを設定する。 | |
xlabel 4 | X軸のラベルを設定する。 | |
ylabel 5 | Y軸のラベルを設定する。 | |
show 6 | 用意したすべての図を表示する。 | |
axes 7 | 図のグラフを管理するオブジェクト。 | |
numpy | arange 8 | 指定された間隔の数例を返す。 |
sin 9 | 指定された array_line な引数の各要素のsinを求める。 |
|
meshgrid 10 | 座標ベクトルから座標行列のリストを返す。 |
登場した用語は以下になる。
分類 | 用語 | 説明 |
---|---|---|
Python文法 | 引数リストのアンパック 11 | ** オペレーターを使って、辞書をアンパックし、キーワード引数として利用することができる。 |
参考
-
matplotlib.rc(group, … # matplotlib — Matplotlib 3.9.0 documentation ↩︎
-
matplotlib.pyplot.plo… # matplotlib.pyplot.plot — Matplotlib 3.9.0 documentation ↩︎
-
matplotlib.pyplot.xlabel — Matplotlib 3.9.0 documentation ↩︎
-
matplotlib.pyplot.ylabel — Matplotlib 3.9.0 documentation ↩︎
-
numpy.meshgrid numpy…. # numpy.meshgrid — NumPy v1.26 Manual ↩︎
-
4.8.5. 引数リストのアンパック 引数… # 4. その他の制御フローツール — Python 3.12.3 ドキュメント ↩︎