2017-04-11 14 views
0

我試圖在Python中使用matplotlib函數來交互式繪製2個增長列表中的最後50個值,而循環繼續進行。但是,一旦列表的大小增加到50以上,繪圖線的值開始重疊。如何使用matplotlib來繪製只有最後50個咆哮列表的值?

我想清除重疊。

這裏是迭代的情節照片< 50.很乾淨。

http://imgur.com/a/FDDtD

這裏是一個迭代> 50.劇情可以看到,它變得凌亂的照片。

http://imgur.com/a/rB1vM

這裏是我的代碼

import matplotlib.pyplot as plt 

ls1 = [] 
ls2 = [] 

while True: 
    (some computation to get, in every iteration, 2 new values: ls1_new and ls2_new) 

    ls1.append(ls1_new) 
    ls2.append(ls2_new) 

    plt.plot(ls1[-50:]) 
    plt.plot(ls2[-50:]) 

    plt.draw() 
    plt.pause(0.0001) 

誰能幫我解決了重疊部分?感謝您的幫助! :)

回答

0

您的問題是,您在每次迭代中創建新行。更新現有線路可能會更好。下面的代碼可能不會馬上起作用,但它應該指向正確的方向。總體思路是保留對plt.plot()返回的Line2D對象的引用,然後使用成員函數Line2D.set_data(x, y)Line2D.set_ydata(y)更新每次迭代的行。

import matplotlib.pyplot as plt 

ls1 = [] 
ls2 = [] 
l1, = plt.plot([]) 
l2, = plt.plot([]) 

while True: 
    (some computation to get, in every iteration, 2 new values: ls1_new and ls2_new) 

    ls1.append(ls1_new) 
    ls2.append(ls2_new) 

    l1.set_data(range(50),ls1[-50:]) 
    l2.set_data(range(50),ls2[-50:]) 

    plt.draw() 
    plt.pause(0.0001)