Matplotlib - izudon/izudon.github.io GitHub Wiki

基本的な使い方

2D描画

基本の流れ:

  1. x(定義域)に配列、y に「取った値」の配列を格納(y は複数種類でも良い)
  2. plot 命令(同時に、ラインスタイル(実線・破線等)、ラベルなどの指定)
  3. 軸、軸ラベル、標題、凡例などの指定
  4. 描画(画面またはファイルへの出力)
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt

# データの作成
x = np.arange(0, 6, 0.1) # 0から6まで0.1刻みで生成
y1 = np.sin(x)
y2 = np.cos(x)

# グラフの描画
plt.plot(x, y1, label="sin") # label -> 凡例などで拾われる
plt.plot(x, y2, linestyle = "--", label="cos") # 破線
plt.xlabel("x") # x軸のラベル
plt.ylabel("y") # y軸のラベル
plt.ylim( -1.1, 1.1 ) # y軸の描画範囲
plt.title('sin & cos') # 標題
plt.legend() # 凡例
plt.show()

3D描画

  1. x と y(定義域)を配列で用意する。
    x = np.arange(-3, 3, 0.25)
    y = np.arange(-3, 3, 0.25)
  2. 定義域配列を行列に変換する。
    x を 行ベクトルとみて縦方向に y の要素数分並べた(だけの)行列 X と
    y を 列ベクトルとみて横方向に x の要素数分並べた(だけの)行列 Y 。
    NumPy はベクトル演算を基本「要素毎」に処理するので、
    定義域の (x, y) を全種類用意できるよう縦横に展開する。
    X, Y = np.meshgrid(x, y)
  3. 取った値を格納する。2次元配列である。
    Z = np.sin(X)+ np.cos(Y)
  4. あとはプロット。
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.plot_wireframe(X,Y,Z)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-3, 3, 0.25)
y = np.arange(-3, 3, 0.25)
X, Y = np.meshgrid(x, y)
Z = np.sin(X)+ np.cos(Y)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,Z) #<---ここでplot

plt.show()

2Dベクトル描画

x0 = np.arange(-2, 2.5, 0.25)
x1 = np.arange(-2, 2.5, 0.25)
X, Y = np.meshgrid(x0, x1)

X = X.flatten()
Y = Y.flatten()

grad = numerical_gradient(function_2, np.array([X, Y]).T).T

plt.figure()
plt.quiver(X, Y, -grad[0], -grad[1], angles="xy", color="#666666")
plt.xlim([-2, 2])
plt.ylim([-2, 2])
plt.xlabel('x0')
plt.ylabel('x1')
plt.grid()
plt.draw()
plt.show()

出力をファイルに保存する

  • 仮想サーバなどで Matplotlib を動かしていて画面には出せない場合などに。
  • ホストマシンで X を動かせばいいじゃないかという議論はおいておく。

  • ズバリ plt.show() のかわりに plt.savefig('<filename>') を呼び出す。
  • ただし matplotlib.pylabimport する前段で matplotlib.use('Agg') しておく。
    • なんでもこれは「バックエンドの指定」をしているらしく、
      バックエンドの指定は matplotlib.pylabimport される前にやらないと
      後だと既に指定されてしまっているとのことだ(エラーメッセージによれば)。
import numpy as np
import matplotlib
matplotlib.use('Agg')  #-- これ
import matplotlib.pylab as plt
   :
   :
plt.plot( x, y )
plt.ylim( -0.1, 1.1 )
plt.savefig( 'a.svg' ) #-- ここでファイルに吐かれる
  • 出力されたファイルはホストマシンからブラウザで確認する(僕の場合)。
    $ python3 -m http.server 8888 &
  • ファイル形式は png, svg, pdf などから選択できる。
    出力指定したファイル名の拡張子から自動判別している。
    解像度などをオプションで指定できる。

plt.plot(y)
plt.savefig('out_graph.png', dpi=300, orientation='portrait', transparent=False, pad_inches=0.0)
plt.savefig('out_graph2.pdf', orientation='portrait', transparent=False, bbox_inches=None, frameon=None)
plt.show()

参考

⚠️ **GitHub.com Fallback** ⚠️