实时matplotlib图仍然在循环中不起作用

时间:2013-11-04 10:48:41

标签: python matplotlib real-time

我想创建一个实时图形绘图程序,它从串口输入。最初,我尝试了很多在网站上发布的代码,但都没有。所以,我决定通过整合我在网站上看到的代码片段来自己编写代码。但问题是图形将仅在程序结束时弹出,换句话说,在循环之外。在循环中,它没有显示任何内容,只是一个空白的画布。我对python还不熟悉。这是我的代码。

import matplotlib.pyplot as plt
import time
import random
from collections import deque
import numpy as np

# simulates input from serial port
def random_gen():
    while True:
        val = random.randint(1,10)
        yield val
        time.sleep(0.1)


a1 = deque([0]*100)
ax = plt.axes(xlim=(0, 20), ylim=(0, 10))
d = random_gen()

line, = plt.plot(a1)
plt.ion()
plt.ylim([0,10])
plt.show()

for i in range(0,20):
    a1.appendleft(next(d))
    datatoplot = a1.pop()
    line.set_ydata(a1) 
    plt.draw()
    print a1[0]
    i += 1
    time.sleep(0.1)

另外,我使用Enthought Canopy学术执照ver 1.1.0。

1 个答案:

答案 0 :(得分:25)

以下解决方案在您的循环中添加此plt.pause(0.0001),如下所示:

import matplotlib.pyplot as plt
import time
import random
from collections import deque
import numpy as np

# simulates input from serial port
def random_gen():
    while True:
        val = random.randint(1,10)
        yield val
        time.sleep(0.1)


a1 = deque([0]*100)
ax = plt.axes(xlim=(0, 20), ylim=(0, 10))
d = random_gen()

line, = plt.plot(a1)
plt.ion()
plt.ylim([0,10])
plt.show()

for i in range(0,20):
    a1.appendleft(next(d))
    datatoplot = a1.pop()
    line.set_ydata(a1)
    plt.draw()
    print a1[0]
    i += 1
    time.sleep(0.1)
    plt.pause(0.0001)                       #add this it will be OK.