2015-02-07 63 views
6

我想在IPython的筆記本內嵌繪製圖形,但.plot() methos只是顯示對象的信息,大熊貓情節不IPython的筆記本電腦顯示爲在線

<matplotlib.axes._subplots.AxesSubplot at 0x10d8740d0> 

,但沒有圖形。我也可以使它與plt.show()顯示圖形,但我想要它內聯。所以我嘗試了%matplotlib inlineipython 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

認爲我們將需要更多信息,顯示您的代碼,導入和平臺... – dartdog 2015-02-07 17:23:32

+0

使用'%matplotlib內聯'時描述的錯誤是由於處理unicode和字符串的問題。可能你有用'latin-1'編碼的字符,並且轉換嘗試使用'decode'。然而,'decode'會使用默認編碼'ascii'將您的角色轉換爲unicode,並且由於該字符在ascii中找不到,轉換將失敗。你應該嘗試使用解碼將字符串轉換爲unicode('「\ xe2」)。解碼(encoding ='latin-1')'),然後將該數據傳遞給matplotlib。 – 2015-02-07 19:52:16

回答

4

變化

ipython notebook --matplotlib=inline 

ipython notebook --matplotlib inline 

通知沒有=跡象。

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。但是,decodeascii作爲默認編碼,並且由於您的字符不屬於ascii,因此會顯示錯誤。該解決方案是將字符串自己與相應的編碼解碼:

import matplotlib.pyplot as plt 

%matplotlib inline 

legend = "\xe2".decode(encoding='latin-1') 

plt.plot(range(5), range(5)) 
plt.legend([legend]) 

enter image description here

順便說一句,關於使用ipython notebook --matplotlib inline,它被認爲是不好的做法,這樣做,因爲你是隱藏什麼,你在做爲了獲得最終的筆記本。將%matplotlib inline包含在筆記本中好得多。

0

感謝您的幫助。 我試過以上所有,但沒有工作。

這裏我發現這是在matplotlib 1.4.x中的fontmanager.py的bug,修復了this開發版的matplotlib,它工作。

我很抱歉,我以前找不到它。謝謝大家。

相關問題