1.環境
・windows10
・Anaconda バージョン conda 4.8.3
・Jupyter notebooks
2.グラフの描画
2.1 手順
①%matplotlib inline
Jupyter Notebookでアウトプット行に表示するためのコード
②ライブラリのインポート
import matplotlib.pyplot as plt
import numpy as np
③描画領域の作成
”fig”の名前の領域を作成
fig = plt.figure() ※1
④座標軸の作成
上記で作成した領域に座標を作成
・複数の座標軸を一度に作成 .subplots() ※2
axes = fig.subplots(2, 3)(例:2行×3列)
axes[0,0].plot([1,3,5,2,4,8]) (例:0行、0列の座標に表示)
・一つづつ座標軸を作成 .add_subplot() ※2
ax1=fig.add_subplot(2, 3,1)(例:2行×3行の1番目を作成)
ax1.plot([1,2,3]) 座標に表示
⑤描画 .plot()
2.2 主なパラメータ
※1 figure()のパラメータ
fig = plt.figure(figsize=(10,7), dpi=100,facecolor=’w’,tight_layout=True)
figsize :領域のサイズ。横縦をfigsize=(width, height)で指定
width, heightはインチ単位で指定。デフォルト6.4in×4.8in
dpi :1インチあたりのドット数
facecolor :図の背景色
tight_layout :Trueでオブジェクトの配置が自動調整
※2 subplots()、.add_subplot()のパラメータ
※3 plot()のパラメータ
線種指定
plot(…,ls=記号,…)で指定できる線種
種類 記号
実線 ‘-’
破線 ‘–’(-が2つ)
一点鎖線 ’-.’
点線 ’:’
plt.plot()を実行すると自動でFigureオブジェクトも作成されるので、plt.figure()は割愛
3.2次元グラフの作成
(1)1つの座標に2つのグラフを表示 [sample_3-1]
plt.plot()を実行すると自動でfigureオブジェクトも作成されるので、plt.figure()は省略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#3.2 2次元グラフ #(1)1つの座標に2つのグラフを表示 #[sample_3-1] %matplotlib inline import matplotlib.pyplot as plt import numpy as np x = np.linspace( -5, 5, 10) #数列を作成、下記と同じ #x=np.array([ -5,-4,-3,-2,-1,0,1,2,3,4,5]) y1 = np.exp(-x) #y=e^-x y2 = np.exp(x) #y=e^x plt.plot(x, y1, label='test') #2次元座標に描画 plt.plot(x, y2, label='test2') #2次元座標に描画 plt.legend() #凡例の表示 plt.grid() #グリッド表示 plt.xlabel('x') #x軸ラベル表示 plt.ylabel('y') #y軸ラベル表示 plt.title('test graph') #タイトル表示 |
(2)複数の座標にグラフを表示 [sample_3-2]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#3.2(2)複数の座標にグラフを表示 #[sample_3-2] %matplotlib inline import matplotlib.pyplot as plt import numpy as np #描画領域の作成 fig = plt.figure() x = np.linspace( -5, 5, 10) #数列を作成、下記と同じ #座標の作成(複数) ax1=fig.add_subplot(2, 2,1)#2*2の1番目 ax2=fig.add_subplot(2, 2,2)#2*2の2番目 ax3=fig.add_subplot(2, 2,3)#2*2の3番目 plt.subplots_adjust(wspace=0.4, hspace=0.6)#座標間にスペースを設ける y1 = np.exp(-x) #y=e^-x y2 = np.exp(x) #y=e^x y3 = x**2 #y=x^2 #描画 ax1.plot(x, y1, label='test1') #2次元座標に描画 ax1.legend() #凡例の表示 ax1.grid() #グリッド表示 ax1.set_xlabel('x') #x軸ラベル表示 ax1.set_ylabel('y') #y軸ラベル表示 ax1.set_title('test1 graph') #タイトル表示 ax2.plot(x, y2, label='test2') #2次元座標に描画 ax2.legend() #凡例の表示 ax2.grid() #グリッド表示 ax2.set_xlabel('x') #x軸ラベル表示 ax2.set_ylabel('y') #y軸ラベル表示 ax2.set_title('test3 graph') #タイトル表示 ax3.plot(x, y3, label='test3') #2次元座標に描画 ax3.legend() #凡例の表示 ax3.grid() #グリッド表示 ax3.set_xlabel('x') #x軸ラベル表示 ax3.set_ylabel('y') #y軸ラベル表示 ax3.set_title('test3 graph') #タイトル表示 |
4.3次元グラフの作成
(1)1つの座標 [sample_4-1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#4.3次元グラフの作成 #4.(1)1つの座標 #[sample_4-1] %matplotlib inline from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np x = np.arange(-3.0, 3.0, 0.1) #arange()は間隔(公差)を指定 y = np.arange(-3.0, 3.0, 0.1) #linspace()は要素数を指定 #格子点の作成 X, Y = np.meshgrid(x, y) #x座標とy座標の要素の入った配列を指定すると、各軸のグリッドの要素を返す Z = X**2+Y**2 #演算X^2+Y^2の結果 #描画領域の作成 fig = plt.figure() ax = Axes3D(fig) ax.set_xlabel("x") #X軸ラベル ax.set_ylabel("y") #Y軸ラベル ax.set_zlabel("f(x, y)") #Z軸ラベル ax.plot_wireframe(X, Y, Z) #3次元の曲面 #ax.plot_surface(X, Y, Z) #3次元の曲面塗りつぶし #ax.scatter(X, Y, Z) #点で表示 |
(2)複数座標 [sample_4-2]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#4.(2)複数グラフ作成 #[sample_4-2] %matplotlib inline from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np #描画領域の作成 fig = plt.figure(figsize=(20,15),facecolor='g') #1つ目の格子点生成 x1 = np.arange(-3.0, 3.0, 0.1) y1 = np.arange(-3.0, 3.0, 0.1) X1, Y1 = np.meshgrid(x1, y1) Z1 = X1**2+Y1**2 #2つ目の格子点生成 x2 = np.arange(-3.0, 3.0, 0.1) y2 = np.arange(-3.0, 3.0, 0.1) X2, Y2 = np.meshgrid(x2, y2) Z2 = X2**2+Y2**2 #1つ目の座標生成と描画 ax1 = fig.add_subplot(2, 2,1, projection='3d') ax1.set_xlabel("x1") ax1.set_ylabel("y1") ax1.set_zlabel("f(x1, y1)") ax1.plot_wireframe(X1, Y1, Z1) #2つ目の座標生成と描画 ax2 = fig.add_subplot(2, 2,2, projection='3d') ax2.set_xlabel("x") ax2.set_ylabel("y") ax2.set_zlabel("f(x, y)") ax2.plot_wireframe(X2, Y2, Z2) |
(3)1つの座標に2つのグラフ [sample_4-3]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#4.(3)1つの座標に2つのグラフ #[sample_4-3] %matplotlib inline from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np #範囲と間隔の設定 x = np.arange(-5, 5, 1) y = np.arange(-5, 5, 1) #格子点作成 X, Y = np.meshgrid(x, y) print(X) print(Y) #計算 Z1 =X**2+Y**2 Z2 =X**2-Y**2 #描画領域の作成 fig = plt.figure() ax = Axes3D(fig) #描画 ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("f(x, y)") ax.plot_surface(X, Y, Z1, rstride=1, cstride=1, cmap='summer', linewidth=0.3) ax.plot_surface(X, Y, Z2, rstride=1, cstride=1, cmap='spring', linewidth=0.3) |
5.参考
・Python公式サイト
https://www.python.org/
・日本のPythonコミュニティ
https://www.python.jp/index.html
・Windows版Anacondaのインストール
https://www.python.jp/install/anaconda/windows/install.html
・NumPy Pythonを使用した科学計算の基本パッケージ
https://numpy.org/
・matplotlib
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリ
https://matplotlib.org/
・mplot3d( 3次元プロット) matplotlibの機能を拡張するためのツールキット
https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html
The subject ends herewith.