國語亂碼中文字幕(算法工程師教你從根本上解決jupyter notebook畫圖中文亂碼的問題)
前言
不知道大家有沒有使用過網頁端代碼交互神器Jupyter notebook,Jupyter是一個非盈利的開源項目,于2014年由IPython項目誕生,隨著它的發展,它支持跨所有編程語言的交互式數據科學和科學計算。它支持Python、R等語言,寫起代碼非常方便,小編在工作和日常中非常喜歡使用它,界面如下圖所示。
最近有一個朋友問我,他在jupyter notebook里面畫圖時,遇到中文亂碼問題,回想起來當年小編剛開始寫Python時也常遇到這種問題。相信剛開始使用jupyter的朋友肯定也會遇到類似的問題,所以小編今天想談一談使用Python畫圖遇到中文亂碼應該怎么解決。
要分清楚亂碼的原因
以Python為例,首先大家要明白Python有Python2和Python3之分,由于Python2的編碼風格,對中文非常不友好,導致編碼錯誤的問題出現很多,Python相對友好很多,在Python2中,對于中文我們要明白utf-8-->unicode-->gbk這樣的套路,當然今天的目的主要是講解畫圖時候的中文亂碼。我們先看字體代碼文件。
#獲取字體文件路徑import matplotlibmatplotlib.matplotlib_fname()
這是我的配置文件路徑:
這就是系統字體文件,通過代碼發現DejaVu Sans是系統默認字段。
因此很多情況下會出現中文亂碼的問題。怎么解決這個問題呢?
解決問題的辦法
1、引入外部字體
這可能是比較笨的一種辦法,但是可以解決亂碼的一些問題
#加入外部引入中文字體的代碼from matplotlib.font_manager import FontProperties# font = FontProperties(fname='./SimHei.ttf', size=10)
這樣可以在實際的畫圖中設置字體為外部引入的字體。
2、Python中設置字體
這種辦法基本可以解決Python2中中文畫圖亂碼的問題,直接在畫圖之前引入下面兩句代碼
plt.rcParams['font.sans-serif'] = [u'SimHei']plt.rcParams['axes.unicode_minus'] = False
3、從系統中獲取中文字體
直接加上下面一句代碼
plt.rc('font',family='SimHei',size=10)
但是這種方法有時候沒有用,看下面:
出現這種結果的原因可能是系統文字中根本沒有中文字體或者還沒有配置。
4、重新配置中文字體
(1)首先獲取配置文件目錄
#獲取配置文件路徑import matplotlibmatplotlib.matplotlib_fname()
(2)將下載好的中文字體文件加入到下面目錄
(3)修改配置文件matplotlibrc
(4)重啟jupyter
進過上面4步操作,應該就可以解決jupyter畫圖中文亂碼的問題了。
5、投機取巧操作
有一些朋友反映經過方法4的操作之后還是沒有解決中文亂碼的問題,what? 經過上面方法4的操作居然沒有解決這個問題,小編心中頓時有千只馬飛過...繼續解決問題,小編重新看了字體設置對應的代碼塊,發現雖然經過方法4的配置,字體設置的底層由于方法寫死了,根本沒有獲取到中文字體,它認準的還是DejaVu Sans,這時候可以想著去修改代碼,但是小編有一個更好的辦法,既然你就是認定了DejaVu Sans,沒問題我把我的中文字體文件SimHei.ttf改名為DejaVuSans.ttf,中文亂碼的問題不就解決了。小編測試了下,的確解決了。
總結
寫代碼的過程中免不了會遇到很多坑,我們需要保持一種求索的精神,耐心的對待每一個BUG,本文從多方面去討論了解決Python中文畫圖亂碼的問題,希望這篇文章對大家有幫助,更多的問題可以在評論區或者私信和我交流。
喜歡我的朋友可以關注我們同名微信公眾號【機器學習與數據挖掘】