"""
matplotlib ノート
"""
#==============
# import
#==============
from matplotlib import pyplot as plt
#==============
#基本
#==============
#グラフの作成、表示
# marker: o, x etc linestyle: None, -, dashed, dotted etc
# color: red, blue, green, black etc
plt.plot(x, y, label='raw data', marker = 'o', markersize = 0.5, linestyle = 'None', linewidth = 0.5, color = 'red')
plt.plot(xc, yc, label='fitted', linestyle = 'dashed')
#plt.scatter(x, y)
#plt.bar(xindex, v, width = 1.5)
plt.title(infile, fontsize = fontsize)
plt.xlabel(header[0], fontsize = fontsize)
plt.ylabel(header[1], fontsize = fontsize)
plt.legend(fontsize = fontsize)
#フォントサイズ
plt.legend(fontsize = legend_fontsize)
plt.tick_params(labelsize = fontsize)
#グラフを表示してプログラムを一時停止
plt.show()
#==============
#グラフのクリアー
#==============
#グラフ全体のクリアー (clear figure)
# clears the entire current figureをすべての軸で表示しますが、
# 他のプロットで再利用できるように、ウィンドウを開いたままにしておきます。
figure.clf()
#グラフのクリアー (clear axis)
#clears an axis、すなわち、現在の図形内の現在アクティブな軸。それは他の軸を手つかずのままにします。
figure.cla()
# closes a windowは、特に指定がない場合は現在のウィンドウになります。
plt.close()
#=========================================
#複数グラフ plotcsv_mult.py
#=========================================
# figureオブジェクト取得
fig = plt.figure(figsize = (15,7))
#縦1、横2に分割し、1番目のグラフ枠をax1に代入
ax1 = fig.add_subplot(1, 2, 1)
# ax1 = fig.add_subplot(121)
ax1.set_yscale('log')
#プロットしたデータのオブジェクト
data = ax1.plot(xT, yEF, label = 'alpha')
ax1.plot(xT, yEFapprox, label = 'alpha(approx)', linestyle = '-', linewidth = 0.5, color = 'red')
ax1.set_xlabel("T (K)")
ax1.set_ylabel("alpha = -mu/(kBT)")
ax1.set_xlim([Tmin, Tmax])
ax1.set_ylim([0.0, max(yEF)])
#フォントサイズ
ax1.tick_params(labelsize = fontsize)
#フォントサイズを指定して凡例を表示
ax1.legend(fontsize = legend_fontsize)
#グラフ間スペースの自動調整
plt.tight_layout()
#グラフ間スペースの手動調整
plt.subplots_adjust(wspace=0.4, hspace=0.6)
#グラフを表示。0.001秒スリープし、プログラムを続行
plt.pause(0.001)
print("Press ENTER to exit>>", end = '')
input()
#=========================================
#3Dグラフ optimize-sd-cg2d-linesearch.py
#=========================================
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
from matplotlib import cm
fig = plt.figure(figsize = (10, 5))
ax = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
# surf = ax.plot_surface(xg, yg, zg, cmap=cm.coolwarm)
surf = ax2.plot_wireframe(xg, yg, zg, rstride=2, cstride=2)
# ax.set_zlim3d(-3.01, 3.01)
# plt.colorbar(surf, shrink=0.5, aspect=10)
ax.set_title('contour')
contour = ax.contourf(xg, yg, zg, levels = 51, cmap = 'Spectral')
# contour = ax.contour(xg, yg, zg, levels = 51, cmap = 'Spectral')
solve, = ax.plot([], color = 'blue', marker = 'o', linestyle = '-')
plt.pause(0.1)
for iter in range(nmaxiter):
#データのリストを更新
xt.append(x0[0])
yt.append(x0[1])
#データをセット
solve.set_data(xt, yt)
plt.pause(0.1)
time.sleep(tsleep)
#=========================================
#グラフの更新 diffeq2nd_planet.py plot_realtimeupdate.py
#=========================================
fig, ax = plt.subplots(1, 1)
# 一度plotする、プロットデータのオブジェクトを受け取る受け取る
lines, = ax.plot(x, y)
while True:
# plotデータの更新
x.append(x[n-1] + 0.1)
y.append(np.sin(x[n]))
# 描画データを更新するときにplot関数を使うと
# lineオブジェクトが増えてしまう。
# set_data()メソッドで描画データを更新する
lines.set_data(x, y)
# set_data()を使うと軸とかは自動設定されない
# x軸の範囲は適宜修正してやる必要がある.
ax.set_xlim((min(x), max(x)))
ax.set_ylim((min(y), max(y)))
# plt.show() プログラムが停止する
# plt.ion() + plt.draw() グラフウインドウが固まってプログラムが止まる
plt.pause(0.01)
#=========================================
#グラフの更新 (グラフをクリアーして再描画)
#=========================================
plt.clf()
plt.title(infile, fontsize = fontsize)
plt.xlabel(header[0], fontsize = fontsize)
plt.ylabel('log(' + header[1] + ')', fontsize = fontsize)
plt.plot(Vd, logId, label='raw data', marker = 'o', markersize = 0.5, linestyle = 'None')
plt.plot(Vi, logIi, label='initial', linestyle = 'dotted')
if ai is not None:
Vc, Ic, logIc = CalIV(ai)
plt.plot(Vc, logIc, label='final', linestyle = 'dashed')
#フォントサイズ
plt.legend(fontsize = legend_fontsize)
plt.tick_params(labelsize = fontsize)
#グラフ間スペースの自動調整
plt.tight_layout()
plt.pause(0.001)
#=========================================
# callback peakfit-scipy-minimize.py
#=========================================
def callback(xk):
global xd
global iter
global figure, ax_fit, ax_conv
global fitdata, convdata
fmin = CalS2(xk)
print("callback {}: xk={}".format(iter, xk))
print(" fmin={}".format(fmin))
iter += 1
xiter.append(iter)
yfmin.append(fmin)
convdata[0].set_data(xiter, yfmin)
ax_conv.set_xlim((0.0, max(xiter) + 1.0))
ax_conv.set_ylim((min(yfmin) * 0.8, max(yfmin) * 1.2))
yc = ycal_list(xd, xk)
fitdata[0].set_data(xd, yc)
plt.pause(0.2)
def main():
figure = plt.figure(figsize = (10, 5))
ax_fit = figure.add_subplot(1, 2, 1)
rawdata = ax_fit.plot(xd, yd, color = 'blue', linestyle = '', linewidth = 0.5,
fillstyle = 'full', marker = 'x', markersize = 5)
inidata = ax_fit.plot(xd, yini, color = 'black', linestyle = 'dashed', linewidth = 0.5)
fitdata = ax_fit.plot([], [], color = 'red', linestyle = '-', linewidth = 0.5)
ax_conv = figure.add_subplot(1, 2, 2)
ax_conv.set_yscale('log')
convdata = ax_conv.plot([], [], color = 'black', linestyle = '-', linewidth = 0.5,
fillstyle = 'full', marker = 'o', markersize = 5)
plt.pause(0.001)
res = minimize(CalS2, x0, jac=diff1, method=method, tol = tol, callback = callback,
options = {'maxiter':maxiter, "disp":True})
#=========================================
tkinterに統合 11-leastsq-GUI-tkmatplot.py
#=========================================
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# Canvas (right)
# figure = plt.subplots()
figure = plt.Figure()
# figure = plt.Figure(figsize=(10, 3), dpi=100)
canvas = FigureCanvasTkAgg(figure, master = right_frame)
canvas.get_tk_widget().pack(side = 'bottom', expand = 1)
canvas._tkcanvas.pack(side = 'bottom', expand = 1)
obj['figure'] = figure
obj['canvas'] = canvas
figure = obj['figure']
figure.clf()
ax = figure.add_subplot(111)
ax.plot(x, y, label = 'raw data', marker = 'o', linestyle = 'None')
ax.plot(xc, yc, label = 'fitted', linestyle = 'dashed')
ax.set_title(obj['title'].get(), fontsize = fontsize)
ax.set_xlabel(obj['xlabel'].get(), fontsize = fontsize)
ax.set_ylabel(obj['ylabel'].get(), fontsize = fontsize)
ax.legend(fontsize = fontsize)
ax.tick_params(labelsize = fontsize)
#グラフ間スペースを自動調整
figure.tight_layout()
canvas.draw()