MPL-附錄01:matplotlib的漢字解決

matplotlib的漢字有的時候容易出現(xiàn)亂碼,一般有兩種辦法解決:
??1. 通過代碼大量設(shè)置字體屬性來解決;
??2. 修改matplotlib環(huán)境配置來解決;

這里mark一下,便于今后查閱使用


一. 在代碼中設(shè)置字體屬性來解決

??代碼中字體屬性有兩種方式:
????|-第一種方式直觀,但解決不了所有問題;
????|-第二種方式需要對matplotlib結(jié)構(gòu)非常熟悉才能運用自如;
??下面是兩種解決辦法的代碼展示:

#coding=utf-8
import pandas  as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
headers=['工作年限','學(xué)歷','職位','職位ID','薪水','城市','發(fā)布時間']
#--加載字體庫------------------------
zn_font=fm.FontProperties(fname="msyh.ttf")
#----------------------------------
pd_reader=pd.read_csv("jobs.csv",encoding="utf-8")
pd_reader=pd_reader.dropna()
plt.figure(1,figsize=(15,8),dpi=80)
#--使用字體屬性----------------------
plt.xlabel('職位數(shù)',fontproperties=zn_font)
plt.ylabel('城市',fontproperties=zn_font)
#----------------------------------
#數(shù)據(jù)統(tǒng)計
pf=pd_reader.groupby(by=["城市"],as_index=True).count()
plt.plot(pf['薪水'],color='r',label='城市薪水統(tǒng)計')
#漢化
ax=plt.gca()
#--遍歷所有組件設(shè)置字體屬性------------
for item in ax.xaxis.get_ticklabels():
    item.set_fontproperties(zn_font)
#----------------------------------
plt.show()

二. 修改matplotlib環(huán)境配置來解決

1. 獲取配置目錄

??通過得到配置文件目錄,與matplotlib系統(tǒng)的數(shù)據(jù)存放目錄

print(mpl.get_configdir())
print(mpl.matplotlib_fname())

??第一個是用戶級別配置文件,第二個是系統(tǒng)級別字體配置文件

??上面第二個語句輸出:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
??其中
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/mpl-data/就是數(shù)據(jù)存放目錄
假如:記matplotlib安裝目錄為:${MLP_HOME},數(shù)據(jù)存放目錄就是:${MLP_HOME}/mpl-data/

2.準(zhǔn)備一個字體庫文件

??在任何一個操作系統(tǒng)可以搜出一把的字體庫,這里使用的是我的最愛:msyh.ttf字體庫。

3.拷貝字體庫到系統(tǒng)數(shù)據(jù)存放目錄

??把字體庫拷貝到數(shù)據(jù)存放目錄下的fonts/ttf目錄,完整的目錄是:

${MLP_HOME}/mpl-data/fonts/ttf

4.確認(rèn)字庫的字體名

??從字體庫文件是看不出字體名,獲取字體名,可以根據(jù)經(jīng)驗,或者網(wǎng)絡(luò)百度得到字體名。
??下面使用代碼獲?。?/p>

fp=fm.FontProperties(fname="msyh.ttf")
print(fp.get_family(),fp.get_name())

??# 輸出的字體名:Microsoft YaHei

1. fp.get_name()函數(shù)的輸出是字體明
2. get_family()輸出的配置的缺省family-name

5.修改配置文件

??1. 首先,打開配置文件${MLP_HOME}/mpl-data/matplotlibrc,
??2. 然后,在文件中找到字體配置的位置:我的配置文件在195行,我增加一行196,配置family如下:

# 195 #font.family         : sans-serif
# 196 font.family         : Microsoft YaHei

??我使用vi打開,截圖如下:

使用vi編輯配置文件

6. 測試

??可以在程序中測試,某些環(huán)境可能因為緩沖滯后,只需要重啟環(huán)境即可。
??比如:ipython就會因為緩沖而暫時沒有效果,重啟下即可。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容