私は化学反応の進行を示すグラフを描こうとしています。進捗自体(時間または反応ステップ)は、スライダを使用して変更可能でなければなりません。 私はこれまで持っているコード:スライダのmatplotlibを使ってxの値を更新
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
fig.canvas.set_window_title('Reaktionsfortschritt')
t0 = 0
t = np.arange(0, t0, .5)
k0 = 0.17
a = np.exp(- k0 * t)
l, = plt.plot(t, a, lw=3, color='crimson')
plt.axis([0, 20, 0, 1])
axrs = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightblue')
srs = Slider(axrs, 'Reaktionsschritte', 0, 20, valinit=0)
def xval(*args):
x = srs.val
t = np.arange(0, x, 0.5)
#l.set_ydata(np.exp(- 0.6 * t))
#plt.plot(t, a)
fig.canvas.draw_idle()
srs.on_changed(xval)
plt.show()
私の知る限りXVAL関数を使用して更新されたプロットレンジ(t)を理解するように。しかし、グラフのプロットはありません。 私は、plt.plot(t, a)
とl.set_ydata(...)
を使って再植え付けを試みました。
は今I(b)の生成物の形成を記述する第2の機能を追加し、
OK]を編集しました。私はこの関数をupdate-functionと同じ方法で追加しました。その結果、私は非常に奇妙な振る舞いをします。スライダを使用して、正のx方向のみにプロットすることができます。そこに私は戻っていない。グラフが描画されると、スライダーの値を小さくすると、「取り消し」されません。それは何か?
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
fig.canvas.set_window_title('Reaktionsfortschritt')
t = np.arange(0, 0, .5)
k0 = 0.17
a = np.exp(- k0 * t)
b = 1 - np.exp(- k0 * t)
# plot
l, = plt.plot(t, a, lw=3, color='crimson')
m, = plt.plot(t, b, lw=3, color='dodgerblue')
plt.axis([0, 20, 0, 1])
plt.grid(True)
axrs = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightblue')
srs = Slider(axrs, 'Zeit', 0, 20, valinit=0)
def update(x):
t = np.arange(0, x, 2)
ax.lines.pop(0) # remove previous line plot
ax.plot(t, np.exp(- k0 * t), lw=3, color='crimson')
ax.plot(t, 1 - np.exp(- k0 * t), lw=3, color='dodgerblue')
fig.canvas.draw()
srs.on_changed(update)
plt.show()
お知らせを動作します。あなたはスライダーで何を変えたいですか?プロットされた点の数を変更したいので、xdataとydataを変更します。 – Michael
あなたの編集のために私の答えを編集しました。これが何が起こっているかについての洞察を与えることを願っています。 – Michael