我试图在ipython notebook内联中绘制图形,但.plot()
方法只显示对象信息,如
<matplotlib.axes._subplots.AxesSubplot at 0x10d8740d0>
但没有图表。我也可以用plt.show()
显示图形,但我想要内联。所以我尝试了%matplotlib inline
和ipython notebook --matplotlib=inline
,但没有用。
如果我使用%matplotlib inline
,则.plot()
会显示
/Users/<username>/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/IPython/core/formatters.py:239:
FormatterWarning: Exception in image/png formatter: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) FormatterWarning,
并使用ipython notebook --matplotlib=inline
显示相同的内容。
答案 0 :(得分:5)
更改
ipython notebook --matplotlib=inline
到
ipython notebook --matplotlib inline
请注意没有=
标志。
答案 1 :(得分:3)
我会根据上面的评论给你一个例子:
你有这样的事情:
import matplotlib.pyplot as plt
%matplotlib inline
legend = "\xe2"
plt.plot(range(5), range(5))
plt.legend([legend])
导致:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
正如我所说,这是因为matplotlib想要使用unicode
类型的字符串。因此,在绘图过程中,matplotlib会尝试解码您的字符串,以使用decode
将其转换为unicode。但是,decode
具有ascii
作为默认编码,并且由于您的角色不属于ascii
,因此会显示错误。解决方案是使用适当的编码自己解码字符串:
import matplotlib.pyplot as plt
%matplotlib inline
legend = "\xe2".decode(encoding='latin-1')
plt.plot(range(5), range(5))
plt.legend([legend])
顺便说一句,关于使用ipython notebook --matplotlib inline
,这样做被认为是不好的做法,因为你隐藏了你为了获得结果笔记本而做的事情。在您的笔记本中包含%matplotlib inline
要好得多。
答案 2 :(得分:0)
感谢您的所有帮助。 我已经尝试了以上所有,但没有奏效。
在这里我发现matplotlib 1.4.x中的fontmanager.py
中存在错误,修复了matplotlib的this开发版本并且有效。
我很抱歉我以前找不到它。谢谢你们所有人。