pandas 情节未在 ipython 笔记本中显示为内联
pandas plot doesn't show in ipython notebook as inline
我试图在 ipython 笔记本内联中绘制图形,但是 .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
显示相同。
改变
ipython notebook --matplotlib=inline
至
ipython notebook --matplotlib inline
注意没有 =
标志。
我将根据我上面的评论给你举个例子:
你有这样的东西:
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
。
感谢您的帮助。
以上方法我都试过了,还是不行。
在这里我发现这是 matplotlib 1.fontmanager.py
中的错误。4.x,修复了 matplotlib 的 this 开发版本并且它有效。
很抱歉没能早点找到它。谢谢大家。
我试图在 ipython 笔记本内联中绘制图形,但是 .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
显示相同。
改变
ipython notebook --matplotlib=inline
至
ipython notebook --matplotlib inline
注意没有 =
标志。
我将根据我上面的评论给你举个例子:
你有这样的东西:
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
。
感谢您的帮助。 以上方法我都试过了,还是不行。
在这里我发现这是 matplotlib 1.fontmanager.py
中的错误。4.x,修复了 matplotlib 的 this 开发版本并且它有效。
很抱歉没能早点找到它。谢谢大家。