2012-06-05 36 views
6

我是matplotlib的新手。我有一個x-y座標列表,我在python中更新並希望使用matplotlib的pyplot進行動畫處理。我想提前指定x範圍和y範圍。下面是我當前的代碼:使用matplotlib和pyplot進行2D座標的簡單動畫

import matplotlib.pyplot as plt 
x=[1,2,3,4] 
y=[5,6,7,8] 
for t in range(100): 
    #lists x and y get updated here 
    #... 
plt.plot(x, y, marker='o', linestyle='None') 
plt.show() 

正如你所看到的,我用plt.plot()plt.show()我的迭代循環結束僅繪製最終座標。但我想把這個步驟放在的循環中,並在每次迭代時繪製一個指定的暫停時間,以便在循環運行時有一個動畫。

只是在循環內部移動該語句或調整該語句不起作用。 雖然我想保持它非常簡單,並且不想使用matplotlib.animation。有沒有使用更多的模塊和庫的簡單方法(只有像plt.pause(),也許只是更多),讓我做我想做的事情?

我在網上查了很多地方,我面對的大多數方法存在的問題是,我在Windows上使用python(x,y)(這是python版本2.7),以及使用過於複雜的模塊和庫的動畫在這裏崩潰。

但是,我能夠在matplotlib網站上運行簡單的東西,如this example,這與我想要的接近,但並不完全。所以也許最好的做法是修改這個例子,適用於我的2D數據(這個例子是針對一維行)。但任何其他建議都是值得歡迎的。

回答

8

這是改編自animation demo

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 

x = [1, 2, 3, 4] 
y = [5, 6, 7, 8] 

for t in range(10): 
    if t == 0: 
     points, = ax.plot(x, y, marker='o', linestyle='None') 
     ax.set_xlim(0, 10) 
     ax.set_ylim(0, 10) 
    else: 
     new_x = np.random.randint(10, size=5) 
     new_y = np.random.randint(10, size=5) 
     points.set_data(new_x, new_y) 
    plt.pause(0.5) 

雖然這是簡單的文檔字符串說,它是緩慢的。

+0

+1。這工作。我只是試着將它調整到我的最終計劃中,看看結果如何。 –

+0

這對我的程序非常有用。公認。謝謝! –

+0

使用'ax.clear()'可能會很方便。那麼你可以簡單地繪製一個新的圖形,你不需要區分第一次和以後的運行。另外,'plt.pause()'對我造成了一個錯誤,我使用'fig.canvas.start_event_loop()'來代替。 – Scipio

相關問題