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就會因為緩沖而暫時沒有效果,重啟下即可。
