解決Python matplotlib繪制圖像無法顯示中文的問題
引言
在數(shù)據(jù)可視化過程中,Python 的 Matplotlib 是廣泛使用的繪圖庫。然而,在圖表標(biāo)題、坐標(biāo)軸標(biāo)簽或圖例中使用中文時(shí),字符會(huì)顯示為方塊。這直接影響數(shù)據(jù)圖表的可讀性,尤其在學(xué)術(shù)論文、技術(shù)報(bào)告或博客中,這種可讀性問題尤為突出。
問題剖析
我們使用以下代碼查看 Matplotlib 所使用的全局默認(rèn) sans-serif 字體列表:
from matplotlib import rcParams, font_manager
print(rcParams['font.sans-serif'])
print(font_manager.FontProperties()) # 當(dāng)前實(shí)際渲染所使用的字體
在 Windows 平臺(tái),Python 3.14,Matplotlib 3.10.7 運(yùn)行結(jié)果如下:
['DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', 'sans-serif']
DejaVu Sans
可以看到,Matplotlib 默認(rèn)采用 DejaVu Sans 字體進(jìn)行渲染,這是一個(gè)以拉丁字母(英文及西文字母)為主的西文字體,并不包含 CJK (中文、日文、韓文) 字符。這就導(dǎo)致了中文字符會(huì)顯示為亂碼或方塊。
解決方案
我們可以手動(dòng)替換 sans-serif 字體列表為 CJK 字體。一般地,我們使用無襯線字體黑體即可。在 Windows 平臺(tái)上可使用微軟雅黑(SimHei),在 Linux 平臺(tái)上可使用文泉驛正黑(WenQuanYi Zen Hei)。同時(shí)強(qiáng)制使用 ASCII 負(fù)號(hào)顯示負(fù)號(hào),以避免字體自身對(duì)負(fù)號(hào)的渲染問題。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei','WenQuanYi Zen Hei']
plt.rcParams['axes.unicode_minus'] = False

浙公網(wǎng)安備 33010602011771號(hào)