plt.close()
現在のインスタンスを閉じます。
plt.close(2)
図 2 を閉じます
plt.close(plot1)
インスタンス plot1 で Figure を閉じます
plt.close('all')
すべての火を閉じます
ここにあります。
これplt.show()
はブロッキング関数であるため、上記で使用したコード例でplt.close()
は、ウィンドウが閉じられるまで実行されないため、冗長になります。
コードの先頭でを使用plt.ion()
して非ブロッキングにすることができますが、これには別の意味があります。
例
コメントでの議論の後、プロット機能の使用方法を示すために、ちょっとした例をまとめました。
以下にプロットを作成します。
fig = plt.figure(figsize=plt.figaspect(0.75))
ax = fig.add_subplot(1, 1, 1)
....
par_plot, = plot(x_data,y_data, lw=2, color='red')
この場合、ax
上記は一対の軸へのハンドルです。これらの軸に何かをしたいときはいつでも、 を呼び出して、現在の軸のセットをこの特定のセットに変更できますaxes(ax)
。
par_plot
line2D インスタンスへのハンドルです。これをアーティストと呼びます。ydata を変更するなど、行のプロパティを変更したい場合は、このハンドルを参照することで変更できます。
次のようにして、スライダー ウィジェットを作成することもできます。
axsliderA = axes([0.12, 0.85, 0.16, 0.075])
sA = Slider(axsliderA, 'A', -1, 1.0, valinit=0.5)
sA.on_changed(update)
1 行目はスライダーの新しい軸を作成し ( と呼ばれaxsliderA
ます)、2 行目は軸に配置されるスライダー インスタンスsA
を作成し、3 行目はスライダーの値が変化したときに呼び出す関数を指定します ( update
)。
私の更新機能は次のようになります。
def update(val):
A = sA.val
B = sB.val
C = sC.val
y_data = A*x_data*x_data + B*x_data + C
par_plot.set_ydata(y_data)
draw()
は、ハンドルを持つLine2Dオブジェクトpar_plot.set_ydata(y_data)
の ydataプロパティを変更します。par_plot
このdraw()
関数は、現在の軸のセットを更新します。
すべてを一緒に入れて:
from pylab import *
import matplotlib.pyplot as plt
import numpy
def update(val):
A = sA.val
B = sB.val
C = sC.val
y_data = A*x_data*x_data + B*x_data + C
par_plot.set_ydata(y_data)
draw()
x_data = numpy.arange(-100,100,0.1);
fig = plt.figure(figsize=plt.figaspect(0.75))
ax = fig.add_subplot(1, 1, 1)
subplots_adjust(top=0.8)
ax.set_xlim(-100, 100);
ax.set_ylim(-100, 100);
ax.set_xlabel('X')
ax.set_ylabel('Y')
axsliderA = axes([0.12, 0.85, 0.16, 0.075])
sA = Slider(axsliderA, 'A', -1, 1.0, valinit=0.5)
sA.on_changed(update)
axsliderB = axes([0.43, 0.85, 0.16, 0.075])
sB = Slider(axsliderB, 'B', -30, 30.0, valinit=2)
sB.on_changed(update)
axsliderC = axes([0.74, 0.85, 0.16, 0.075])
sC = Slider(axsliderC, 'C', -30, 30.0, valinit=1)
sC.on_changed(update)
axes(ax)
A = 1;
B = 2;
C = 1;
y_data = A*x_data*x_data + B*x_data + C;
par_plot, = plot(x_data,y_data, lw=2, color='red')
show()
上記に関するメモ: アプリケーションを実行すると、update
ブロックしている show() に到達するまで、コードが順番に実行されます (関数がメモリに格納されていると思います)。スライダーの 1 つに変更を加えると、メモリから更新機能が実行されます (と思いますか?)。
これが、データを処理する関数を使用してバックグラウンドで値を変更できるように、show() がそのまま実装されている理由です。