2016-02-05 39 views
2

我試圖用for循環實時繪製數字。我有以下簡單的代碼:MatPlotLib的離子()和繪製()不工作

import matplotlib.pyplot as plt 

plt.ion() 
plt.figure() 
for i in range(100): 
    plt.plot([i], [i], 'o') 
    plt.draw() 
    plt.pause(0.0001) 

此代碼不顯示圖形,直到它完成計算,我不想。我希望它在每個循環之後畫出圖。如果我用plt.show替換plt.draw(),則會實時輸出多個數字,但我希望它們全都出現在同一圖中。有任何想法嗎?

編輯:
我下載了PyCharm與Anaconda,一切正常。我想這是Spyder的問題,因爲我嘗試了幾個不同的版本,但沒有成功。如果有人有任何線索是Spyder導致這個問題的原因,請告訴我!

+0

嘗試把'plt.show()'plt.figure後'()'。 – Ben

+0

這樣做,我得到輸出'',並且代碼與以前一樣評估。 – Alex

+0

你如何執行腳本?從bash終端調用'python stript.py'?或者從Ipython終端中調用'%run'? – Ben

回答

3

適合你的情況從:Python realtime plotting

import matplotlib.pyplot as plt 
import numpy as np 
import time 

fig = plt.figure() 
ax = fig.add_subplot(111) 

# some X and Y data 
x = [0] 
y = [0] 

li, = ax.plot(x, y,'o') 

# draw and show it 
fig.canvas.draw() 
plt.show(block=False) 

# loop to update the data 
for i in range(100): 
    try: 
     x.append(i) 
     y.append(i) 

     # set the new data 
     li.set_xdata(x) 
     li.set_ydata(y) 

     ax.relim() 
     ax.autoscale_view(True,True,True) 

     fig.canvas.draw() 

     time.sleep(0.01) 
    except KeyboardInterrupt: 
     plt.close('all') 
     break 
+0

感謝您的回覆。我試着運行你的代碼,但是我得到一個錯誤,說'show()有一個意外的參數。我讀到塊參數是實驗性的,但我不確定爲什麼它不適用於我的Spyder平臺。 – Alex

+0

它沒有'block'關鍵字嗎?如果你已經處於交互模式,顯然它不工作。 – CoMartel

+0

它沒有阻塞語句,但這樣做輸出許多不同的數字。有沒有辦法把它們放在一起? – Alex

0

嘿,我有同樣的問題,我檢查了其他問題,當我插入一個暫停到我的解決方案解決了我的問題。以下是一些適用於我的示例代碼。

import matplotlib.pyplot as plt 
import numpy as np 
plt.ion() 
x = np.arange(0, 4*np.pi, 0.1) 
y = [np.sin(i) for i in x] 
plt.plot(x, y, 'g-', linewidth=1.5, markersize=4) 
plt.pause(0.0001)   
plt.plot(x, [i**2 for i in y], 'g-', linewidth=1.5, markersize=4) 
plt.pause(0.0001) 
plt.plot(x, [i**2*i+0.25 for i in y], 'r-', linewidth=1.5, markersize=4) 
plt.pause(0.0001) 

溶液張貼在這裏: Matplotlib ion() and subprocesses