我遇到了在ipython笔记本中绘图的问题。基本上,当我在Canopy编辑器命令窗口中执行它时,相同的代码会生成我想要的图表,但是只需
在笔记本中打包KeyError:位于0x53e2f310的matplotlib.axes.AxesSubplot对象
我无法理解这些环境之间的差异。直到我在两个环境中运行print(IPython.sys_info())
命令。
在Canopy IPython.sys_info()
返回:
{' commit_hash':' c433019',' commit_source':' installation', ' default_encoding':' UTF-8',' ipython_path': ' /usr/local/Canopy/appdata/canopy-1.0.3.1262.rh5-x86_64/lib/python2.7/site-packages/IPython' ;, ' ipython_version':' 1.0.dev',' os_name':' posix',' platform': ' Linux的3.8.0-26泛型-x86_64的与 - Debian的喘鸣SID&#39 ;, ' sys_executable&#39 ;: ' / home / kambiz / Enthought / Canopy_64bit / User / bin / python',' sys_platform': ' linux2',' sys_version':' 2.7.3 | 64位| (默认,2013年6月14日, 18:32:48)\ n [GCC 4.1.2 20080704(Red Hat 4.1.2-52)]'}
在Notebook IPython.sys_info()
中返回:
{' commit_hash':' 177894e',' commit_source':' installation', ' default_encoding':' UTF-8',' ipython_path': ' /home/kambiz/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/IPython' ;, ' ipython_version':' 0.13.1',' os_name':' posix',' platform': ' Linux的3.8.0-26泛型-x86_64的与 - Debian的喘鸣SID&#39 ;, ' sys_executable&#39 ;: ' / home / kambiz / Enthought / Canopy_64bit / User / bin / python',' sys_platform': ' linux2',' sys_version':' 2.7.3 | 64位| (默认,2013年6月14日, 18:32:48)\ n [GCC 4.1.2 20080704(Red Hat 4.1.2-52)]'}
我注意到Ipython_path指向EPD文件所在的不同路径,这反过来指向不同版本的ipython!我不确定这是怎么发生的,也不确定如何修复它。这样两个环境都运行相同的版本,以相同的方式执行代码。
使用IPython版本0.13.1导致matplotlib失败的代码片段是:
import pylab as pl
...
fig, axes = pl.subplots(len(evokeds), sharex=True, sharey=True, tight_layout=True, figsize=(8, 11), dpi=100)
figname = (data_path + subj_queue[r] + '/' + subj_queue[r] + '_evokeds.pdf')
for evoked, ax, cond in zip(evokeds, axes.flatten(), ['Known', 'Known-ctrl', 'Unknown', 'Unkown-ctrl']):
evoked.plot(picks=mag_picks, axes=ax)
ax.set_title('%s' % cond)
fig.savefig(figname, format='pdf')
evokeds是由第三方类函数Evoked生成的mne.Epochs.average()个list
个对象的类evoked.plot(picks=mag_picks, axes=ax)
。在IPython 0.13.1中崩溃matplotlib的绘图命令也是来自mne模块的类函数mne.fiff.evoked.plot()。可以使用Ipython 0.13.1在外部笔记本中生成相同绘图问题的公开示例here。错误{{1}}生成的是KeyError:。以下是子图的屏幕截图:
这是完整的追溯:
KeyError Traceback(最近一次调用 最后)in() 25 figname =(data_path + subj_queue [r] +' /' + subj_queue [r] +' _evokeds.pdf') 26为诱发,ax in zip(evokeds,axes.flatten()): ---> 27 evoked.plot(picks = mag_picks,axes = ax) 28 ax.set_title('%s'%cond) 29 fig.savefig(figname,format =' pdf')
情节中的/usr/local/mne-python/mne/fiff/evoked.pyc(自我,选择, 排除,单位,显示,ylim,proj,xlim,hline,单位,scalings,标题, 轴) 396 plot_evoked(self,picks = picks,exclude = exclude,unit = unit,show = show, 397 ylim = ylim,proj = proj,xlim = xlim,hline = hline,units = units, - > 398 scalings = scalings,titles = titles,axes = axes) 399 400 def plot_topomap(self,times = None,ch_type =' mag&#39 ;, layout = None,vmax = None, plot_evoked中的/usr/local/mne-python/mne/viz.pyc(evoked,picks, 排除,单位,显示,ylim,proj,xlim,hline,单位,scalings,标题, 轴)1213 1214 D = this_scaling * evoked.data [idx, :] - > 1215 pl.axes(ax)1216 ax.plot(times,D.T)1217 if xlim not not: /home/kambiz/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/pyplot.pyc 在轴(* args,** kwargs) 650 651 if isinstance(arg,Axes): - > 652 a = gcf()。sca(arg) 653其他: 654 rect = arg
/home/kambiz/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc 在sca(self,a)1196 def sca(self,a):1197'设置 当前轴为a并返回' - > 1198 self._axstack.bubble(a)1199 for self中的func._axobservers:func(self)1200 return a
/home/kambiz/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc 在泡沫中(自我,a) 97堆栈,到顶部。 98""" ---> 99返回Stack.bubble(self,self._entry_from_axes(a)) 100 101 def add(self,key,a):
/home/kambiz/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc 在_entry_from_axes(self,e) 85 86 def _entry_from_axes(self,e): ---> 87 ind,k = dict([(a,(ind,k))for(k,(ind,a))in self._elements])[e] 88返回(k,(ind,e)) 89
KeyError:matplotlib.axes.AxesSubplot对象位于0x56e401d0