Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态更新python中的图形线_Python_Numpy_Matplotlib - Fatal编程技术网

动态更新python中的图形线

动态更新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

我正在使用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.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已经腐烂。