2016-08-17 58 views
0

嗨我想在matplotlib中顯示一些數字而不停止計算。我想這個數字展現出來的是關注它的計算完成,例如右後:在matplotlib中顯示幾個數字而不停止計算

import numpy as np 
import pylab as py 

x=np.linspace(0,50,51) 
y=x 
fig, axs = plt.subplots(1, 1) 
cs = axs.plot(x, y) 

現在我想展示的情節不阻塞的可能性做一些其他計算

plt.show(block=False) 
plt.pause(5) 

我創建了第二個情節

y1=2*x 
fig1, axs1 = plt.subplots(1, 1) 
cs1 = axs1.plot(x, y1) 

plt.show() 

然而,這工作第一凍結(之後我加了5謝勝利,暫停),直到我叫plt.show()結尾。第一個數字顯示和工作至關重要,然後在計算之後添加另一個數字。

+0

我在https://github.com/matplotlib/matplotlib/issues/2134/ efiring發表了一些有關此主題的舊回答。基本上他說,當進行計算時,數字會凍結,並且沒有什麼可以做的。必須停止計算才能處理這個情節。從那以後可能有什麼變化? – Revist

回答

0

下面的代碼應該做你想做的。我在IPython Notebook中做了這個。

from IPython import display 
import matplotlib.pyplot as plt 

def stream_plot(iterable, plotlife=10.): 

     for I in iterable: 
      display.clear_output(wait=True) 
      output = do_calculations_on_i(I) 
      plt.plot(output) 
      display.display(plt.gca()); 
      time.sleep(plotlife); #how long to show the plot for 

wait = True將等待清除舊圖,直到它有新的繪圖或打印任何其他輸出。

我把睡眠放在那裏,所以我可以觀察每個情節之前,它被抹去。這對於必須觀察多個實體的分佈很有用。你可能會也可能不會需要它來做你想做的事情。

+0

感謝您的回覆。這段代碼是否對一些I進行計算,並停止計算以顯示其他10秒的情節? – Revist

+0

@Revist,是的。如果您的計算時間足夠長,則無需休眠(暫停)循環操作。 我錯過了想要將圖添加到前一個圖的想法。你能爲你的任務提供更多的背景嗎?在不知道的情況下,您可以將輸出放入某個列表中,並在該列表的每次迭代中重新繪製。 – Mansweet