2016-11-30 89 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