iInfo 資訊交流: Jupyter notebook 操作(9) --- Matplotlib 繪圖中文字無法正常顯示問題

最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2017/02/20] 近來有網友詢問 MultiCharts 與 Excel 畫冰火能量圖 (8)MultiCharts 與Excel 畫冰火能量圖(11) --- 更名「台股儀表板」 文章中教學檔案取得方式,有興趣的朋友可透過 Line了解詳情 (請勿以為是免費分享),Line : aminwhite5168。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,於 7/21、7/22 兩天開課,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲,5/30 前早鳥優惠票,請盡快把握機會,歡迎券商、大專院校邀約講座。。

2017年12月19日 星期二

Jupyter notebook 操作(9) --- Matplotlib 繪圖中文字無法正常顯示問題

用Matplotlib繪圖,要加入中文顯示時,遇到中文字變成了一個個小方框,這是因為Matplotlib函式庫沒有支援中文字型,造成無法處理中文的顯示。
為了要顯示中文字,可用以下三種方法來處理:
方法一:修改Matplotlib畫圖設定。
在 Command line上尋找matplotlibrc設定檔位址。
python -c "print __import__('matplotlib').matplotlib_fname()"

或是在Jupyter上尋找matplotlibrc設定檔位址。
import matplotlib
print(matplotlib.matplotlib_fname())

開啟matplotlibrc設定檔,找到開頭為 #font.serif、#font.sans-serif 這兩行。

移除 #,在 "DejaVu Serif" 前加入 "SimHei,"

並找到 #axes.unicode_minus 這行,移除 #,與設定為 False,日圖片中可以顯示負號。
程式碼如下:
%pylab inline
x = linspace(-5, 5, 2000)
plot(x, sinc(x))
plt.gcf().set_size_inches(20, 8)
plt.title(u'sinc(x)圖形', fontsize=25)
plt.xlabel(u'-5到5範圍', fontsize=25)
plt.ylabel(u'sinc(x)', fontsize=25)
plt.tick_params(axis ='both', labelsize=25)
plt.savefig('sample.jpg')

查看系統支援的字型
fm = matplotlib.font_manager.FontManager()
for f in fm.ttflist:
    print f.name.decode('utf-8')
方法二:外部動態指定字型1。
透過指定外部字型方式顯示中文。
plt.rcParams['font.sans-serif'] = 'simhei'
plt.rcParams['axes.unicode_minus'] = False
程式碼如下:
%pylab inline
x = linspace(-5, 5, 2000)
plt.rcParams['font.sans-serif'] = 'simhei'
plt.rcParams['axes.unicode_minus'] = False
plot(x, sinc(x))
plt.gcf().set_size_inches(20, 8)
plt.title(u'sinc(x)圖形', fontsize=25)
plt.xlabel(u'-5到5範圍', fontsize=25)
plt.ylabel(u'sinc(x)', fontsize=25)
plt.tick_params(axis ='both', labelsize=25)
plt.savefig('sample.jpg')

方法三:外部動態指定字型2。
透過改變字型屬性,設定中文顯示。
import matplotlib.font_manager as fm
font = fm.FontProperties(fname='C:\Windows\Fonts\simhei.ttf', size=25)
程式碼如下:
%pylab inline
import matplotlib.font_manager as fm

font = fm.FontProperties(fname='C:\Windows\Fonts\simhei.ttf', size=25)
x = linspace(-5, 5, 2000)
plot(x, sinc(x))
plt.gcf().set_size_inches(20, 8)
plt.title(u'sinc(x)圖形', fontproperties = font)
plt.xlabel(u'-5到5範圍', fontproperties = font)
plt.ylabel(u'sinc(x)', fontproperties = font)
plt.tick_params(axis ='both', labelsize=25)
plt.savefig('sample.jpg')

字型名稱找尋,到 C:\WINDOWS\Fonts 下,找到需要的字型,滑鼠右鍵點選內容,找到字型名稱。

參考資料: