2017-01-05 73 views
0

我已經創造了一些動畫後就正常了 - 儘管 - 緩凝時關鍵字:matplotlib動畫塊傳輸=真正原因KeyError異常

blit=False 

然而,在我的努力通過設定塊傳輸,以加快動畫=真我在運行我的測試時遇到了一些奇怪的KeyError異常。

最後,我有一個預感,它可能不會有一個編碼錯誤,但也許有一個設置,甚至一個錯誤。

因此我從here導入了simple_anim.py腳本,發現發生了同樣的錯誤。

我測試過一些例子,他們都給出了相同的異常.... :(

任何人可以幫助我,並給上發生了什麼事情的一些信息?

的代碼是以下:

""" 
A simple example of an animated plot 
""" 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

fig, ax = plt.subplots() 

x = np.arange(0, 2*np.pi, 0.01) 
line, = ax.plot(x, np.sin(x)) 


def animate(i): 
    line.set_ydata(np.sin(x + i/10.0)) # update the data 
    return line, 


# Init only required for blitting to give a clean slate. 
def init(): 
    line.set_ydata(np.ma.array(x, mask=True)) 
    return line, 

ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init, 
           interval=25, blit=True) 
plt.show() 

凸起的例外是:

Traceback (most recent call last): 
    File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/backend_bases.py", line 1305, in _on_timer 
    ret = func(*args, **kwargs) 
    File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 1021, in _step 
    still_going = Animation._step(self, *args) 
    File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 827, in _step 
    self._draw_next_frame(framedata, self._blit) 
    File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 845, in _draw_next_frame 
    self._pre_draw(framedata, blit) 
    File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 858, in _pre_draw 
    self._blit_clear(self._drawn_artists, self._blit_cache) 
    File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 898, in _blit_clear 
    a.figure.canvas.restore_region(bg_cache[a]) 
KeyError: <matplotlib.axes._subplots.AxesSubplot object at 0x7fb3b9d3a198> 
+1

我只有'interval'低於'60'的問題 - 我的錯誤表明問題始於用於顯示窗口的Tkinter。當然,程序啓動兩個線程(或者更確切的說,使用Tkinter'after()'後周期性地執行'animate()',一些元素的啓動速度會比其他元素快,然後是第一個元素所需的其他元素 – furas

+0

當我在家運行這個代碼時 - 認爲是 - 相同的軟件配置:一切正常但是... 我已經能夠重新創建相同的KeyError的東西,當我插入一個'plt.show()'語句之前創建動畫與'FuncAnimation ....)'電話 ...我有一種感覺,我正在進行一些事情。 –

+0

..經過一番進一步的調查,我發現在代碼的開頭添加'plt.ion()'語句會導致它給出這個'KeyError'異常,**只有當'blit = True'被設置。當我將其更改爲'blit = False'時,它仍然工作。 不幸的是,我無法在工作中測試我的代碼(根據我提出的這個問題),但我很快就會做到這一點。 –

回答

0

經過這麼我在家裏調試,我已經找到了我自己的問題的答案。我懷疑這是ipython中的一個錯誤,但我不想肯定地說明這一點,因爲99 +%的時間,錯誤在屏幕和屏幕前面的椅子背面之間。

事實證明,它運行我提供我自己的劇本源於我做了什麼前:通過plt.ion()

開啓互動這是一個新手的錯誤,我已經因爲糾正。然而,我在simple_anim.py之前運行的腳本是通過run simple_anim.py' (I prefer developing with IPython.. legacy of my MATLAB experiences). I've forgotten to mention this, but this turned out to be critical. If I had tried running the code *the normal way* via在IPython3中調用的,python3 simple_anim.py'一切都會正常工作!

但事實證明,將交互模式設置爲打開,而IPython是異常的原因。

我非常清楚,通過plt.ion()在IPython中啓用交互模式非常愚蠢,但是,它發生在我身上,我懷疑更多的人遭受了這種痛苦。因此,它認爲這種行爲(引起這種異常)至少是不必要的行爲,並且可能是Ipython或matplotlib.pyplot.ion()函數中的一個錯誤。

有沒有人有任何想法,如果我應該提及這個也許 -bug?