今天用matplotlib畫餅狀圖時候遇到中文亂碼,通常遇到中文亂碼有兩種通用的解決方法,一種是修改matplotlibrc,經過修改matplotlibrc中的font.sans-serif添加中文,一種是直接在代碼中經過rcParams修改字體,既然遇到亂碼固然先用傳統方法試試,代碼以下:python
能夠看到雖然title的中文問題解決了,可是餅狀圖的中文依然顯示亂碼,下面試試修改matplotlibrc文件面試
遇到中文能夠看出亂碼問題,而後嘗試了修改matplotlibrc文件,可是問題卻依然沒獲得解決:app
Lib\site-packages\matplotlib\mpl-data目錄,打開matplotlibrc文件,刪除font.family
和font.sans-serif
兩行前的#
,並在font.sans-serif
後添加微軟雅黑字體(Microsoft YaHei),可是發現原來仍是不行,到底是什麼問題呢?函數
______________________________________________________字體
後來發現ax.pie()函數返回值裏面有text實例以下圖:spa
ax.pie(np.array(game_app["download_times"])[:5],labels=game_app["name"][:5],autopct='%1.1f%%') × Out[73]: ([<matplotlib.patches.Wedge at 0xd1b7450>, <matplotlib.patches.Wedge at 0xd4686f0>, <matplotlib.patches.Wedge at 0xd5757b0>, <matplotlib.patches.Wedge at 0xd58b4f0>, <matplotlib.patches.Wedge at 0xd58b950>], [<matplotlib.text.Text at 0xd531710>, <matplotlib.text.Text at 0xd575250>, <matplotlib.text.Text at 0xd575b90>, <matplotlib.text.Text at 0xd58b3d0>, <matplotlib.text.Text at 0xd58bd30>], [<matplotlib.text.Text at 0xd4689d0>, <matplotlib.text.Text at 0xd575450>, <matplotlib.text.Text at 0xd575f70>, <matplotlib.text.Text at 0xd58b690>, <matplotlib.text.Text at 0xd58bfb0>])
查看了一下text實例的fontname名稱,居然不是Microsoft YaHei仍是Bitstream Vera Sans,原來問題在這,圖形中的text實例並無受到影響:3d
a = ax.pie(np.array(game_app["download_times"])[:5],labels=game_app["name"][:5],autopct='%1.1f%%') a[1][1].get_fontname() Out[46]: 'Bitstream Vera Sans'
那麼只能直接改text實例了,code
pie = ax.pie(np.array(game_app["download_times"])[:5],labels=game_app["name"][:5],autopct='%1.1f%%') #圖形中的文字沒法經過rcParams設置 for font in pie[1]: font.set_fontproperties(mpl.font_manager.FontProperties( fname='L:/Python27/Lib/site-packages/matplotlib/mpl-data/fonts/ttf/simfang.ttf'))
修改後餅狀圖圖形中的中文亂碼能夠解決了:get