我是Python matplotlib
的新手,想要在循环中更新数字。
这是一些简单的测试代码。我想绘制3个图表,每个图表持续2秒,每次都有不同的斜率。当然,我知道我应该阅读更多关于matplotlib
的内容,但我需要快速做一些事情。下面有什么问题?谢谢!
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import time
def demo(a):
y = [xt*a+1 for xt in x]
ax.plot(x,y)
if __name__ == '__main__':
plt.ion()
fig, ax = plt.subplots()
ax.set_ylim([0,15])
x = range(0,5)
for a in range(1,4):
demo(a)
time.sleep(2)
我认为plt.ion()
使其互动并且ax.plot(x,y)
立即生效(但不要猜测)。我尝试在ax.draw()
之后添加ax.plot(x,y)
,但它需要一些像艺术家或我还不知道的东西:)。此外,我有这个错误消息(Ubuntu 14.04.LTS)。
Xlib: extension "XInputExtension" missing on display ":1.0".
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
Major opcode: 62 (X_CopyArea)
Resource id: 0x0
编辑:我在下面添加了正确的代码。 (根据Estilus的解决方案,我修改了一些正确的图形显示。
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import time
def demo(a):
plt.cla()
y = [xt*a+1 for xt in x]
ax.set_ylim([0,15])
ax.plot(x,y)
if __name__ == '__main__':
plt.ion()
fig, ax = plt.subplots()
x = range(5)
for a in range(1,4):
demo(a)
plt.pause(3)
plt.draw()
答案 0 :(得分:3)
因此,plt.ion()需要暂停一小段时间才能实现交互。否则,你只会碰到一个冻结的白色屏幕。其次,您想使用draw()来更新图形。因此,您的代码看起来像这样:
import matplotlib.pyplot as plt
import numpy as np
import time
def demo(a):
y = [xt*a+1 for xt in x]
ax.plot(x,y)
if __name__ == '__main__':
plt.ion()
fig, ax = plt.subplots()
ax.set_ylim([0,15])
x = range(0,5)
for a in range(1,4):
demo(a)
plt.pause(3)
plt.draw()
我将暂停时间设置为3秒,但如果您愿意(例如0.000001)则可能是一个非常小的数字。希望这有帮助!
答案 1 :(得分:0)
您似乎正在尝试理解how to update a plot in matplotlib。
您应该使用此代码了解如何使用[[Authorize]]
public class TestController : ApiController
{
....
更新图表数据:
fig1.canvas.draw()
答案 2 :(得分:0)
这是一个有效的代码。关键是:
plt.cla()
:清除每次抽奖之间的轴。如果要保留所有图表,请删除此行。fig.canvas.draw()
:实际将情节绘制到图中的画布#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import time
def demo(a):
plt.cla()
y = [xt*a+1 for xt in x]
ax.set_ylim([0,200])
ax.plot(x,y)
fig.canvas.draw()
if __name__ == '__main__':
plt.ion()
fig, ax = plt.subplots()
x = range(5)
for a in range(40):
demo(a)
time.sleep(0.1)