python notebook matplotlib为抛出非GUI异常的数据帧绘制图



当我尝试在我的笔记本中绘制数据帧时,我看到一个'non gui'异常被抛出。

import pandas as pd
import sys,os
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
%pylab inline
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
plt.figure(); df.plot();  #<-- Exception here

显示了一个图,df的第一列被绘制出来,然后我看到了这个异常。当我试图画一个系列时,我没有看到任何问题。下面是异常跟踪:

(看起来我们正在尝试将df绘制为'交互式'图,是否有其他函数/参数尝试不'交互式')

...Anaconda2libsite-packagespandastoolsplotting.pyc in __call__(self, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
...Anaconda2libsite-packagespandastoolsplotting.pyc in plot_frame(data, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
...Anaconda2libsite-packagespandastoolsplotting.pyc in _plot(data, x, y, subplots, ax, kind, **kwds)
...Anaconda2libsite-packagespandastoolsplotting.pyc in generate(self)
...Anaconda2libsite-packagespandastoolsplotting.pyc in _make_plot(self)
...Anaconda2libsite-packagespandastoolsplotting.pyc in _ts_plot(cls, ax, x, data, style, **kwds)
...Anaconda2libsite-packagespandastseriesplotting.pyc in format_dateaxis(subplot, freq)
...Anaconda2libsite-packagesIPythonutilsdecorators.pyc in wrapper(*args, **kw)
...Anaconda2libsite-packagesmatplotlibbackendsbackend_tkagg.pyc in draw_if_interactive()
     68         figManager =  Gcf.get_active()
     69         if figManager is not None:
---> 70             figManager.show()
     71 
     72 class Show(ShowBase):
...Anaconda2libsite-packagesmatplotlibbackend_bases.pyc in show(self)
   2618         optional warning.
   2619         """
-> 2620         raise NonGuiException()
   2621 
   2622     def destroy(self):
NonGuiException: 

解决方案

今天早上在类似的环境(蟒蛇,Python 2.7)中工作时,我得到了完全相同的错误。错误信息几乎与您的相同。有趣的是,相同的代码在不同的环境、同一台机器上运行时没有任何错误。所以这是第一个提示,它可能是一个包/依赖问题。

有效的解决方案是对错误消息引用的包进行更新。你的是:

...Anaconda2libsite-packagesmatplotlibbackend_bases.pyc in show(self)
   2618         optional warning.
   2619         """
-> 2620         raise NonGuiException()
   2621 
   2622     def destroy(self):

所以你要尝试的是更新你的matplotlib包。由于您使用conda,我建议:

conda update matplotlib

确认Matplotlib已更新

您应该确认matplotlib已更新。在命令提示符(终端)中,您应该看到:

cairo:       1.14.12-hab642c4_1               --> 1.14.12-hc4e6be7_4    
...
matplotlib:  2.1.0-py36h5068139_0             --> 3.0.0-py36h54f8f79_0  

或者,在你的Jupyter Notebook/iPython中运行:

import matplotlib as plt
plt.__version__ # print 3.0.0

现在再次进行绘图-在Python 2和3中尝试您的代码,两者都可以工作(同样,使用Anaconda)。

最新更新