問題描述
在使用matplotlib繪圖時,常常要求圖例使用中文,而若直接使用plt.title(‘中文’)或plt.xlabel(‘中文’)時,中文可能會出現下面的小方塊
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLyEkeNBTVq5UMRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2MTO5UTO0MjMwIDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
解決方法
快速解決方法
在導入子產品後加入下面代碼
plt.rcParams['font.sans-serif']=['SimHei'] # 用來設定字型樣式以正常顯示中文标簽
plt.rcParams['axes.unicode_minus']=False # 預設是使用Unicode負号,設定正常顯示字元,如正常顯示負号
若仍無法解決,可能是電腦沒有’SimHei’這個字型,可以試着用’FangSong’等其他字型
下面是Unicode和ASCII顯示負号時的不同(參考matplotlib官網)
永久解決辦法
轉自:【python資料可視化筆記】——matplotlib圖例中文亂碼以及坐标負号顯示
找到自己想要的中文字型
- 在系統中查找已有的字型(好處是不需要安裝):在“C:\Windows\Fonts”中選擇字尾為“.ttf”的中文字型并複制,這一步我選擇了黑體
- 在 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)$')