我尝试绘制随机粒子图,其中使用滑块减少粒子数。 到目前为止,我得到了以下内容:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
fig.canvas.set_window_title('Teilchen')
x = np.random.randn(50)
y = np.random.randn(50)
plt.plot(x,y, 'o')
axrs = plt.axes([0.125, 0.1, 0.778, 0.03], facecolor='lightblue')
srs = Slider(axrs, 'Zeit', 0, 50, valinit=0, valfmt='%0.0f')
def update1(x):
p = round(srs.val,0)
n = int(50-p)
x = np.random.randn(n)
y = np.random.randn(n)
plt.cla()
ax.plot(x,y, 'o')
fig.canvas.draw_idle()
srs.on_changed(update1)
plt.show()
问题在于,不是重新绘制减少数量的粒子,而是将粒子添加到现有图中。 剩余颗粒的位置应优选在整个时间内保持相同。
答案 0 :(得分:1)
您需要使用ax.clear()
代替plt.cla()
。
说明:plt.cla()
清除当前轴。但是,在滑块更新时,滑块是当前轴,因此清除了滑块而不是要绘制的轴。要清除特定轴ax
,您可以使用ax.clear()
。
请注意,您也可以只更新粒子而不是重绘它们。
x = np.random.randn(50)
y = np.random.randn(50)
particles, = ax.plot(x,y, 'o')
axrs = plt.axes([0.125, 0.1, 0.778, 0.03], facecolor='lightblue')
srs = Slider(axrs, 'Zeit', 0, 50, valinit=50, valfmt='%0.0f')
def update1(val):
p = round(val,0)
n = int(50-p)
x = np.random.randn(n)
y = np.random.randn(n)
particles.set_data(x,y)
fig.canvas.draw_idle()
srs.on_changed(update1)
plt.show()
为了保持粒子的位置,我们的想法当然不是绘制新的随机数,而是使用在开头绘制的随机数。
x = np.random.randn(50)
y = np.random.randn(50)
particles, = ax.plot(x,y, 'o')
axrs = plt.axes([0.125, 0.1, 0.778, 0.03], facecolor='lightblue')
srs = Slider(axrs, 'Zeit', 0, 50, valinit=50, valfmt='%0.0f')
def update1(val):
p = round(val,0)
n = int(50-p)
particles.set_data(x[:n],y[:n])
fig.canvas.draw_idle()
srs.on_changed(update1)
plt.show()