matplotlibで折れ線グラフ
計算結果をビジュアルで見るには、やはりグラフを描くのが一番ですね。
ということで、matplotlibの使い方を簡単に紹介します。
import matplotlib.pyplot as plt listx = [1, 2, 3, 4] listy = [1, 3, 4, 2] plt.plot(listx, listy)
たったこれだけで、折れ線グラフが書けます。

グラフの種類もいろいろ。
・折れ線グラフ plt.plot(listx, listy)
・縦棒グラフ plt.bar(listx, listy)
・横棒グラフ plt.barh(listx, listy)
・散布図 plt.plot(listx, listy, "ro") "ro":赤い円
(または) plt.scatter
・ヒストグラム plt.hist()
・等高線
・3D棒グラフ
・3Dメッシュ
| key | 内容 | 略表記 | defalut |
|---|---|---|---|
| linewidth, | 線の太さ | lw | |
| linestyle, | solid, dashed, dashdot, dotted | ls | solid(実線) |
| color | "red"など | c | |
| marker | マーカーの種類 "o":丸 "s":square, "D":ひし形, "x", "+"他 | None | |
| markersize | マーカーの大きさ | ms | |
| markeredgewidth | マーカーの枠線の太さ | mew | |
| markeredgecolor | マーカーの枠線の色 | mec | |
| markerfacecolor | マーカーの塗りつぶしの色 | mfc | |
| antialiased | 線を滑らかにする処理 True, False |
マーカーを入れてみた。
import matplotlib.pyplot as plt import numpy as np x = np.array([1, 2, 3, 4]) y = np.array([1, 3, 4, 2]) plt.plot(x, y, marker="o") plt.plot(x, y*.8,marker="+", markersize=10, markeredgewidth=2 ) plt.plot(x, y*.6, marker="s", linewidth=1 )

グラフの色は自動で色分けしてくれますね。
1:緑 2:橙 3:緑 4:赤 5:紫
6:茶 7:桃 8:灰 9:黄緑 10:水色
plt.show()をせずに連続してグラフを書くと、どんどん次の色へとなっていきました。
グラフエリアの設定など
plt.figure(figsize=(8,6), dpi=80) #figsizeはinch
plt.subplot(2, 3, 1) #エリアを縦2、横3に分割してその1番目
plt.tight_layout() #サブエリアの図が重ならないように。
plt.xlim(x.min, x.max*1.1) #xの変域
plt.xticks(-4, 4, 9) #目盛り -4から4まで全9個
plt.xticks([-4, -3, -2, ..., 4]) #上と同じ
ax = plt.gca() #軸の情報 get current axis
ax.spines["right"].set_color("none") #右消し
ax.xaxis.set_ticks_position("bottom") #目盛りは軸の下
plt.plot(x, y, color=~, label="凡例")#凡例
plt.legend(loc="upper_left") #凡例
plt.savefig("test.png", dpi=72) #グラフの保存
plt.show() #グラフの表示
plt.hlines([1, 2, 3], 左端,右端, ls="dashed") #横線の描画折れ線グラフの他のオプション
plt.title("グラフのタイトル")
plt.xlabel("x軸")
plt.ylabel("y軸")
plt.grid(True) #罫線の表示
最初の色に戻してx軸、y軸、グラフタイトルを入れてみると・・・
x = np.array([1, 2, 3, 4])
y = np.array([1, 3, 4, 2])
plt.plot(x, y, marker="o")
plt.plot(x, y*.8,marker="+", markersize=10, markeredgewidth=2 )
plt.plot(x, y*.6, marker="s", linewidth=1 )
plt.title("折れ線グラフ")
plt.xlabel("x軸")
plt.ylabel("y軸")
plt.grid(True)
あれ?うまくいかない
matplotlibで日本語 を見ると、何やら日本語表示にはfontpropertyをセットするようです。
from matplotlib.font_manager import FontProperties fp = FontProperties(fname='C:\WINDOWS\Fonts\msgothic.ttc', size=14)
WindowsのFontフォルダから適当に好みのフォントを選んでセットですね
グラフタイトル、軸ラベル、メモリ、テキスト、アノテーションにはfontproperties=fpのオプションをつけて、
凡例だけはprop=ftとオプションをつけます。
x = np.array([1, 2, 3, 4])
y = np.array([1, 3, 4, 2])
plt.plot(x, y, marker="o")
plt.plot(x, y*.8,marker="+", markersize=10, markeredgewidth=2 )
plt.plot(x, y*.6, marker="s", linewidth=1 )
plt.title("折れ線グラフ", fontproperties=fp)
plt.xlabel("x軸", fontproperties=fp)
plt.ylabel("y軸", fontproperties=fp)
plt.legend(["1","2", "3"], loc="best", prop=fp)
plt.grid(True)

できた!
○曲線の描画 y=f(x)
横軸を細かく分けると曲線に見えます。
def f(x): return x**3 - 6*x #f(x)=x^3-6x x = np.linspace(-2, 2, 40) #xの範囲 -2~2を40等分 y = f(x) plt.plot(x, y)

(x, y)でplotせずに、(x, f(x))でplotするとコードも短くなります。
def f(x): return x**3 - 6*x x = np.linspace(-2, 2, 40) plt.plot(x, f(x))
lambda式を使うともっと短く。
x = np.linspace(-2, 2, 40) plt.plot(x, (lambda x:x**3 - 6*x)(x))
1行でも書けますが、読みにくい・・・
plt.plot(np.linspace(-2, 2, 40), (lambda x:x**3 - 6*x)(np.linspace(-2, 2, 40)))
x = np.linspace(0, np.pi * 2, 100) y = np.sin(x) plt.plot(x, y) plt.title("y=sin(x)", fontsize=14) xlist = np.array(["0", "1/2π", "π", "3/2π", "2π"]) xtick = np.linspace(0, np.pi *2, 5) plt.xticks(xtick, xlist) plt.grid() plt.show()

他のサンプルや散布図などの別形式のグラフはまた近いうちに。
サンプルと散布図ってなんだか似てる・・・