解決Matplotlib中文顯示亂碼的完整教程
問題描述
當(dāng)我們在 Matplotlib 中使用中文字符時(shí),通常會遇到如下問題:中文標(biāo)題、標(biāo)簽或數(shù)據(jù)無法正確顯示,而是出現(xiàn)亂碼或方框。以下是一個(gè)簡單的示例代碼:
示例代碼
import matplotlib.pyplot as plt
?
# 數(shù)據(jù)
categories = ['A類', 'B類', 'C類', 'D類']
values = [3, 7, 5, 10]
?
# 創(chuàng)建柱狀圖
plt.bar(categories, values)
?
# 設(shè)置標(biāo)題和標(biāo)簽
plt.title('柱狀圖', fontsize=16) # 中文標(biāo)題
plt.xlabel('類別', fontsize=12) # 中文X軸標(biāo)簽
plt.ylabel('數(shù)量', fontsize=12) # 中文Y軸標(biāo)簽
?
# 顯示圖表
plt.show()
運(yùn)行結(jié)果
在沒有正確配置字體的情況下,執(zhí)行上述代碼后,中文字符將無法正常顯示,可能出現(xiàn)亂碼或方框,示例如下:

解決方案
下載并安裝中文字體
Matplotlib默認(rèn)使用的字體庫不包括中文字體。為了解決這個(gè)問題,我們需要下載一個(gè)支持中文的字體,如SimHei(黑體)。可以使用
wget下載字體文件:
!wget -O simhei.ttf "https://www.wfonts.com/download/data/2014/06/01/simhei/chinese.simhei.ttf" # 或 !wget -O simhei.ttf "https://github.com/StellarCN/scp_zh/blob/master/fonts/SimHei.ttf"
設(shè)置 Matplotlib 使用中文字體
下載字體后,接下來要讓 Matplotlib 使用該字體。通過 font_manager 來加載新的字體,并通過 rc 設(shè)置默認(rèn)字體。
import matplotlib
?
# 添加下載的字體文件
matplotlib.font_manager.fontManager.addfont('chinese.simhei.ttf')
?
# 設(shè)置 Matplotlib 使用 SimHei 字體
matplotlib.rc('font', family='SimHei')
驗(yàn)證字體是否成功加載
你可以通過以下代碼檢查 Matplotlib 是否成功加載了 SimHei 字體:
import matplotlib.font_manager as fm
?
# 打印系統(tǒng)中所有可用的字體
for font in fm.fontManager.ttflist:
print(font.name)
在輸出中,如果顯示
SimHei字體,說明字體安裝成功。設(shè)置中文字體顯示
雖然上述步驟已經(jīng)加載了
SimHei字體,但為了確保Matplotlib正常顯示中文標(biāo)簽,還需要設(shè)置rcParams來指定默認(rèn)字體為SimHei,并確保負(fù)號可以正常顯示。
# 設(shè)置 Matplotlib 使用 SimHei 字體來顯示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False # 正常顯示負(fù)號
完整示例
將上述設(shè)置整合到一起,形成完整的代碼如下:
import matplotlib.pyplot as plt
import matplotlib
?
# 設(shè)置字體,確保中文顯示正常(非必須添加此代碼)
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
?
# 數(shù)據(jù)
categories = ['A類', 'B類', 'C類', 'D類']
values = [3, 7, 5, 10]
?
# 創(chuàng)建柱狀圖
plt.bar(categories, values)
?
# 設(shè)置標(biāo)題和標(biāo)簽
plt.title('柱狀圖', fontsize=16) # 中文標(biāo)題
plt.xlabel('類別', fontsize=12) # 中文X軸標(biāo)簽
plt.ylabel('數(shù)量', fontsize=12) # 中文Y軸標(biāo)簽
?
# 顯示圖表
plt.show()
最終效果
經(jīng)過上述配置后,中文字符應(yīng)該能夠正常顯示在圖表中,效果如下所示:

擴(kuò)展:Matplotlib 配置與調(diào)試
查看 Matplotlib 字體緩存目錄
如果你遇到字體加載問題,可以查看 Matplotlib 的緩存目錄,確保字體已經(jīng)成功安裝并被 Matplotlib 識別。
import matplotlib as mpl print(mpl.get_cachedir())
這將返回緩存目錄的路徑,幫助你調(diào)試字體加載問題。
其他字體支持
除了 SimHei(黑體)之外,Matplotlib 還支持多種其他中文字體,如 Microsoft YaHei(微軟雅黑),F(xiàn)angSong(仿宋),以及系統(tǒng)自帶的其他字體。你可以選擇合適的字體來調(diào)整圖表樣式。
總結(jié)
通過上述步驟,我們可以解決 Matplotlib 中中文顯示問題。確保字體安裝和配置正確,不僅可以提升圖表的美觀性,還能增強(qiáng)圖表的可讀性。希望這篇文章能夠幫助你更好地在 Python 中使用 Matplotlib 繪制中文圖表。
以上就是解決Matplotlib中文顯示亂碼的完整教程的詳細(xì)內(nèi)容,更多關(guān)于Matplotlib中文亂碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pytorch模型遷移和遷移學(xué)習(xí),導(dǎo)入部分模型參數(shù)的操作
這篇文章主要介紹了Pytorch模型遷移和遷移學(xué)習(xí),導(dǎo)入部分模型參數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
對Python3中列表乘以某一個(gè)數(shù)的示例詳解
今天小編就為大家分享一篇對Python3中列表乘以某一個(gè)數(shù)的示例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python實(shí)現(xiàn)簡單http服務(wù)器功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單http服務(wù)器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
python簡單實(shí)現(xiàn)插入排序?qū)嵗a
在本篇文章里小編給大家整理了一篇關(guān)于python簡單實(shí)現(xiàn)插入排序?qū)嵗a,有需要的朋友們可以學(xué)習(xí)參考下。2020-12-12

