1. 程式人生 > >Pandas matplotlib 無法顯示中文

Pandas matplotlib 無法顯示中文

Pandas 無法顯示中文問題 解決方案##

Pandas在繪圖時,會顯示中文為方塊,主要原因有二:

  • matplotlib 字型問題
  • seaborn 字型問題

只需要在檔案開始動態設定字型配置就可以了,但是要注意,字型設定可能需要嘗試多次,比如我一開始設定的win10中的’SamKi’,但是執行結果仍然是中文顯示方塊,後來我換成了’KaiTi’才正常顯示的中文,具體原因可能只是某種字型獲取失敗而已.(本部分最後有win自帶中文字體表)


import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
# mpl.rcParams['axes.unicode_minus'] = False # 解決儲存影象是負號'-'顯示為方塊的問題,或者轉換負號為字串

import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']})

執行效果展示

所有關於袁隆平教授的報告詞頻統計圖

win自帶中文字型

win預設自帶中文字型

matplotlib 解決方案一 動態修改配置##

程式碼和第一部分的前半部分一致


import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
# mpl.rcParams['axes.unicode_minus'] = False # 解決儲存影象是負號'-'顯示為方塊的問題,或者轉換負號為字串

matplotlib 解決方案二 設定自定義字型##

這種方式較為複雜,博主不建議這種方式:


import numpy as np
import pylab as pl
import matplotlib.font_manager as fm

myfont = fm.FontProperties(fname=r'D:\Fonts\simkai.ttf') # 設定字型
t = np.arange(0.0,2.0 * np.pi,0.01) # 自變數取值範圍
s = np.sin(t) # 計算正弦函式值
z = np.cos(t) # 計算餘弦函式值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='餘弦')
pl.xlabel('x-變數',fontproperties=myfont,fontsize=24) #設定標籤
pl.ylabel('y-正弦餘弦函式值',fontproperties=myfont,fontsize=24)
pl.title('sin-cos函式影象',fontproperties=myfont,fontsize=32) #影象標題
pl.legend(prop=myfont)
pl.show()

執行結果展示
sin-cos影象

win自帶字型庫路徑

  • C:\Windows\Fonts\ 內含大量字型
  • 注意在該資料夾下,字型檔案的名字和其他資料夾下顯示的不一致,請使用右鍵屬性-常規中檔名,或者使用拷貝到其他資料夾後顯示的字型檔名字

Ubutnu下Matplotlib的永久解決方案

首先去隨便下載一箇中文字型(*.ttf)檔案,最好是黑體,楷體,宋體等微軟本來自帶的字型。
點選安裝之後,可以通過下面的命令檢視字型,注意獲取字型的英文名字。如果已經提前知道,就可以不獲取了,或者直接開啟ttf檔案一般裡邊會有英文名字的備註。不過還是直接檢視一下,直接複製英文名字。比較保險

cd ~/.cache
fc-list :lang=zh-cn

命令列檢視字型
然後將下載的字型放入Matplotlib的相應位置
比如我的位置是

/home/fonttian/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
/home/fonttian/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

然後上跳兩級找到matplotlibrc檔案,並開啟matplotlibrc。
找到兩個欄位取消註釋,並修改

# 本人此處使用楷體
font.family         : KaiTi
axes.unicode_minus  : False

然後最好刪除一下Matplotlib的快取。

rm ~/.cache/matplotlib -R

然後略微修改之前的程式碼,然後執行測試即可

import numpy as np
import pylab as pl

t = np.arange(0.0,2.0 * np.pi,0.01) # 自變數取值範圍
s = np.sin(t) # 計算正弦函式值
z = np.cos(t) # 計算餘弦函式值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='餘弦')
pl.xlabel('x-變數',fontsize=24) #設定標籤
pl.ylabel('y-正弦餘弦函式值',fontsize=24)
pl.title('sin-cos函式影象',fontsize=32) #影象標題
pl.show()

中文效果演示

參考