2016-11-30 35 views
0

我一直在尝试从熊猫数据框中获取更新的图,但没有成功。我的问题:情节窗口不出现(它不隐藏 - 我相信这一点)。python(pandas?)live plot

我已经尝试从stackoverflow重建和更改不同的解决方案。我最近的尝试是基于this post。纯副本,粘贴确实有效,所以问题需要在我的修改中。

我改变了它,因为我想每秒自动更新一次。

import serial as s 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 
from time import sleep 

data = pd.DataFrame(np.random.random((10,10))) # I want to use pandas because 
# of easier timestamp handling 

fig, ax = plt.subplots() 
ax.set(title='title') 
im = ax.imshow(data) 

while True: 
    im.set_data(np.random.random((10,10))) 
    print "hello" #just to see if sth happens 
    fig.canvas.draw() 
    sleep(1) 

plt.show() 

只是为了解释:后来我想从串行端口读取数据并将它们馈送到绘图以使我的数据可视化。

那么,你期望的是:提供的代码每秒打印hello,但不显示任何情节。有任何想法吗?我离开他们。顺便说一下:我很惊讶没有找到这种问题的“简单,直接的”解决方案。我可以想象,有些人正在尝试更新剧情?!

+1

你永远无法脱身'而TRUE'所以你的代码永远不会达到'show'部分。 – Lafexlos

+0

你检查了这一个http://stackoverflow.com/questions/4098131/how-to-update-a-plot-in-matplotlib或https://www.lebsanft.org/?p=48? – Lafexlos

+0

@Lafexlos:确实,plt.show()有点多余,但fig.canvas.draw()应该显示该图。我检查了你提出的两个链接,但没有得到我期望的结果。 – Robert

回答

1

您可以使用包的DrawNow

from pylab import * # import matplotlib before drawnow 
from drawnow import drawnow, figure 
from time import sleep 
import numpy as np 

def draw_fig_real(): 
    imshow(data, interpolation='nearest') 

data = np.random.random((10,10)) 

figure() 
for i in range(10): 
    data = np.random.random((10,10)) 
    sleep(0.5) 
    drawnow(draw_fig_real) 

希望这有助于

+0

并没有给它太多的尝试,但它看起来很有前途! – Robert