天天看點

matplotlib中文亂碼解決及plt.rcParams參數的使用問題描述解決方法永久解決辦法有關plt.rcParams參數的使用

問題描述

在使用matplotlib繪圖時,常常要求圖例使用中文,而若直接使用plt.title(‘中文’)或plt.xlabel(‘中文’)時,中文可能會出現下面的小方塊

matplotlib中文亂碼解決及plt.rcParams參數的使用問題描述解決方法永久解決辦法有關plt.rcParams參數的使用

解決方法

快速解決方法

在導入子產品後加入下面代碼

plt.rcParams['font.sans-serif']=['SimHei']    # 用來設定字型樣式以正常顯示中文标簽
plt.rcParams['axes.unicode_minus']=False    # 預設是使用Unicode負号,設定正常顯示字元,如正常顯示負号
           

若仍無法解決,可能是電腦沒有’SimHei’這個字型,可以試着用’FangSong’等其他字型

下面是Unicode和ASCII顯示負号時的不同(參考matplotlib官網)

matplotlib中文亂碼解決及plt.rcParams參數的使用問題描述解決方法永久解決辦法有關plt.rcParams參數的使用
matplotlib中文亂碼解決及plt.rcParams參數的使用問題描述解決方法永久解決辦法有關plt.rcParams參數的使用

永久解決辦法

轉自:【python資料可視化筆記】——matplotlib圖例中文亂碼以及坐标負号顯示

找到自己想要的中文字型

  1. 在系統中查找已有的字型(好處是不需要安裝):在“C:\Windows\Fonts”中選擇字尾為“.ttf”的中文字型并複制,這一步我選擇了黑體
  2. 在 fontpalace 上下載下傳對應版本的字尾為“.ttf”的字型,複制到“C:\Windows\Fonts”中安裝

把字型複制到matplotlib的字型檔案中

輸入下面指令找到matplotlib配置檔案

在“c:\program files\python37\lib\site-packages\matplotlib\mpl-data\matplotlibrc”的“font/ttf”檔案夾中粘貼剛剛複制的字型,然後修改配置檔案matplotlibrc,去掉以下三行代碼開頭的#

font.family         : sans-serif

font.sans-serif     : SimHei, DejaVu Sans, Bitstream Vera Sans, ...    # 這裡注意要把字型名稱SimHei放在第一個

axes.unicode_minus  : False    # 修改為False,作用是解決負号的亂碼問題
           

還要注意有的字型名稱并不是字型檔案的名稱,可以檢視字型檔案的屬性(标題)确認一下

重新加載字型

做完以上操作後執行下面指令

from matplotlib.font_manager import _rebuild

_rebuild()
           

之後重新開機python,很多時候這樣就解決了。

删除matplotlib緩存檔案

如果仍然不能正常顯示輸入以下代碼

在’C:\Users\sunch.matplotlib’找到緩存檔案夾并删除該檔案夾,之後重新開機python,如果還是不行可以試試重新開機電腦,我就是重新開機了才可以,果然沒有什麼是一次重新開機解決不了的,如果有那就兩次

有關plt.rcParams參數的使用

轉自:Matplotlib中plt.rcParams用法(設定圖像細節)

plt.rcParams['figure.figsize'] = (5.0, 4.0)     # 顯示圖像的最大範圍
plt.rcParams['image.interpolation'] = 'nearest' # 內插補點方式,設定 interpolation style
plt.rcParams['image.cmap'] = 'gray'             # 灰階空間

#設定rc參數顯示中文标題
#設定字型為SimHei顯示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
#設定正常顯示字元
plt.rcParams['axes.unicode_minus'] = False
plt.title('sin曲線')
#設定線條樣式
plt.rcParams['lines.linestyle'] = '-.'
#設定線條寬度
plt.rcParams['lines.linewidth'] = 3
#繪制sin曲線
plt.plot(x, y, label='$sin(x)$')