动态更新python中的图形线
我正在使用matplotlib绘制一条直线,并希望在生成新值后立即更新直线数据。但是,一旦进入循环,就不会出现任何窗口。即使打印行指示循环正在运行 这是我的密码:动态更新python中的图形线,python,numpy,matplotlib,Python,Numpy,Matplotlib,我正在使用matplotlib绘制一条直线,并希望在生成新值后立即更新直线数据。但是,一旦进入循环,就不会出现任何窗口。即使打印行指示循环正在运行 这是我的密码: def inteprolate(u,X): ... return XX # generate initial data XX = inteprolate(u,X) #initial plot xdata = XX[:,0] ydata = XX[:,1] ax=plt.axes() line, = plt.pl
def inteprolate(u,X):
...
return XX
# generate initial data
XX = inteprolate(u,X)
#initial plot
xdata = XX[:,0]
ydata = XX[:,1]
ax=plt.axes()
line, = plt.plot(xdata,ydata)
# If this is in, The plot works the first time, and then pauses
# until the window is closed.
# plt.show()
# get new values and re-plot
while True:
print "!"
XX = inteprolate(u,XX)
line.set_xdata(XX[:,0])
line.set_ydata(XX[:,1])
plt.draw() # no window
当
plt.show()
阻塞且plt.draw
不更新/显示窗口时,如何实时更新绘图?您需要plt.ion()。看一看这个:。您还可以浏览Matplotlib动画类:您将需要plt.ion()。看一看这个:。您还可以探索Matplotlib动画类:我认为这个玩具代码澄清了@ardoi的答案:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,2*np.pi,num=100)
plt.ion()
for i in xrange(x.size):
plt.plot(x[:i], np.sin(x[:i]))
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plt.draw()
plt.clf()
编辑:
前面的代码通过在屏幕上设置正弦函数的动画来显示正弦函数。我认为这个玩具代码澄清了@ardoi的答案:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,2*np.pi,num=100)
plt.ion()
for i in xrange(x.size):
plt.plot(x[:i], np.sin(x[:i]))
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plt.draw()
plt.clf()
编辑:
前面的代码通过在屏幕上设置正弦函数的动画来显示正弦函数。与@Alejandro相同的有效方法是:
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
x = np.linspace(0,2*np.pi,num=100)
y = np.sin(x)
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plot = plt.plot(x[0], y[0])[0]
for i in xrange(x.size):
plot.set_data(x[0:i],y[0:i])
plt.draw()
与@Alejandro相同的有效方法是:
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
x = np.linspace(0,2*np.pi,num=100)
y = np.sin(x)
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plot = plt.plot(x[0], y[0])[0]
for i in xrange(x.size):
plot.set_data(x[0:i],y[0:i])
plt.draw()
您需要在循环中调用
plt.pause
,以使gui有机会处理您给它处理的所有事件。如果您不这样做,它可能会被备份,并且永远不会显示您的图形
# get new values and re-plot
plt.ion() # make show non-blocking
plt.show() # show the figure
while True:
print "!"
XX = inteprolate(u,XX)
line.set_xdata(XX[:,0])
line.set_ydata(XX[:,1])
plt.draw() # re-draw the figure
plt.pause(.1) # give the gui time to process the draw events
如果你想制作动画,你真的应该学习如何使用
动画
模块。开始时请参阅此部分。您需要调用plt。在循环中暂停,以便gui有机会处理您指定它处理的所有事件。如果您不这样做,它可能会被备份,并且永远不会显示您的图形
# get new values and re-plot
plt.ion() # make show non-blocking
plt.show() # show the figure
while True:
print "!"
XX = inteprolate(u,XX)
line.set_xdata(XX[:,0])
line.set_ydata(XX[:,1])
plt.draw() # re-draw the figure
plt.pause(.1) # give the gui time to process the draw events
如果你想制作动画,你真的应该学习如何使用动画
模块。请参阅此开始。您能解释一下代码的作用吗?谢谢。你能解释一下代码的作用吗?谢谢。你能解释一下代码的作用吗?谢谢。这与OP中的代码有何不同?您只是以不同的方式使用了set_data
。另外,使用plot
作为变量名是非常糟糕的风格。您能解释一下代码的作用吗?谢谢。这与OP中的代码有何不同?您只是以不同的方式使用了set_data
。另外,使用plot
作为变量名是一种非常糟糕的风格。此外,Link已经腐烂。Link已经腐烂。