1. 程式人生 > >Python程式設計:解決matplotlib繪圖中文亂碼問題

Python程式設計:解決matplotlib繪圖中文亂碼問題

測試環境:

  • mac
  • python3

先檢視本機支援的字型


# 顯示可以用的中文字型
from matplotlib.font_manager import FontManager
import subprocess


def show_can_use_font():
    # all font list get from matplotlib.font_manager:
    mpl_fonts = set(f.name for f in FontManager().ttflist)

    # for python2
    # output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
# for python3 # Chinese font list get from fc-list output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True, encoding="utf8") zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n')) # the fonts we can use: available = set(mpl_fonts) & set(zh_fonts)
for f in available: print('\t', f) if __name__ == '__main__': show_can_use_font()

執行以上指令碼,得到可以使用的字型

LiSong Pro
.LastResort
Arial Unicode MS
LiHei Pro
Wawati SC
Wawati TC
STFangsong
STHeiti

將上面的字型設定到rcParams就可以正常顯示中文


import pandas as pd
import matplotlib.pyplot as plt
from
matplotlib import rcParams # 設定字型 rcParams["font.family"]="STHeiti" rcParams["font.size"]= 8 path = "data/總人口.txt" data = pd.read_csv(path, sep=" ") data = pd.DataFrame(data) x = data.ix[4].keys()[1:] y = data.ix[4].values[1:] print(x) print(y) """ Index(['2016年', '2015年', '2014年', '2013年', '2012年', '2011年', '2010年', '2009年', '2008年', '2007年'], dtype='object') [58973 60346 61866 62961 64222 65656 67113 68938 70399 71496] """ plt.plot(x, y) plt.title("鄉村人口(萬人)") plt.xlabel("時間(年)") plt.ylabel("人口(萬人)") plt.show()

在這裡插入圖片描述
附件:
data/總人口.txt

指標 2016年 2015年 2014年 2013年 2012年 2011年 2010年 2009年 2008年 2007年
年末總人口(萬人) 138271 137462 136782 136072 135404 134735 134091 133450 132802 132129
男性人口(萬人) 70815 70414 70079 69728 69395 69068 68748 68647 68357 68048
女性人口(萬人) 67456 67048 66703 66344 66009 65667 65343 64803 64445 64081
城鎮人口(萬人) 79298 77116 74916 73111 71182 69079 66978 64512 62403 60633
鄉村人口(萬人) 58973 60346 61866 62961 64222 65656 67113 68938 70399 71496

參考
Linux/MacOS下matplotlib能正常顯示的中文字型選擇