解決Matplotlib中文顯示亂碼的完整教程
問(wèn)題描述
當(dāng)我們?cè)?nbsp;Matplotlib
中使用中文字符時(shí),通常會(huì)遇到如下問(wèn)題:中文標(biāo)題、標(biāo)簽或數(shù)據(jù)無(wú)法正確顯示,而是出現(xiàn)亂碼或方框。以下是一個(gè)簡(jiǎn)單的示例代碼:
示例代碼
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é)果
在沒(méi)有正確配置字體的情況下,執(zhí)行上述代碼后,中文字符將無(wú)法正常顯示,可能出現(xiàn)亂碼或方框,示例如下:
解決方案
下載并安裝中文字體
Matplotlib
默認(rèn)使用的字體庫(kù)不包括中文字體。為了解決這個(gè)問(wèn)題,我們需要下載一個(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
使用中文字體
下載字體后,接下來(lái)要讓 Matplotlib
使用該字體。通過(guò) font_manager
來(lái)加載新的字體,并通過(guò) rc
設(shè)置默認(rèn)字體。
import matplotlib ? # 添加下載的字體文件 matplotlib.font_manager.fontManager.addfont('chinese.simhei.ttf') ? # 設(shè)置 Matplotlib 使用 SimHei 字體 matplotlib.rc('font', family='SimHei')
驗(yàn)證字體是否成功加載
你可以通過(guò)以下代碼檢查 Matplotlib
是否成功加載了 SimHei
字體:
import matplotlib.font_manager as fm ? # 打印系統(tǒng)中所有可用的字體 for font in fm.fontManager.ttflist: print(font.name)
在輸出中,如果顯示
SimHei
字體,說(shuō)明字體安裝成功。設(shè)置中文字體顯示
雖然上述步驟已經(jīng)加載了
SimHei
字體,但為了確保Matplotlib
正常顯示中文標(biāo)簽,還需要設(shè)置rcParams
來(lái)指定默認(rèn)字體為SimHei
,并確保負(fù)號(hào)可以正常顯示。
# 設(shè)置 Matplotlib 使用 SimHei 字體來(lái)顯示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False # 正常顯示負(fù)號(hào)
完整示例
將上述設(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)過(guò)上述配置后,中文字符應(yīng)該能夠正常顯示在圖表中,效果如下所示:
擴(kuò)展:Matplotlib 配置與調(diào)試
查看 Matplotlib
字體緩存目錄
如果你遇到字體加載問(wèn)題,可以查看 Matplotlib
的緩存目錄,確保字體已經(jīng)成功安裝并被 Matplotlib
識(shí)別。
import matplotlib as mpl print(mpl.get_cachedir())
這將返回緩存目錄的路徑,幫助你調(diào)試字體加載問(wèn)題。
其他字體支持
除了 SimHei
(黑體)之外,Matplotlib
還支持多種其他中文字體,如 Microsoft YaHei(微軟雅黑),F(xiàn)angSong(仿宋),以及系統(tǒng)自帶的其他字體。你可以選擇合適的字體來(lái)調(diào)整圖表樣式。
總結(jié)
通過(guò)上述步驟,我們可以解決 Matplotlib
中中文顯示問(wèn)題。確保字體安裝和配置正確,不僅可以提升圖表的美觀性,還能增強(qiáng)圖表的可讀性。希望這篇文章能夠幫助你更好地在 Python
中使用 Matplotlib
繪制中文圖表。
以上就是解決Matplotlib中文顯示亂碼的完整教程的詳細(xì)內(nèi)容,更多關(guān)于Matplotlib中文亂碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pytorch模型遷移和遷移學(xué)習(xí),導(dǎo)入部分模型參數(shù)的操作
這篇文章主要介紹了Pytorch模型遷移和遷移學(xué)習(xí),導(dǎo)入部分模型參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03fastapi與django異步的并發(fā)對(duì)比分析
這篇文章主要介紹了fastapi與django異步的并發(fā)對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03對(duì)Python3中列表乘以某一個(gè)數(shù)的示例詳解
今天小編就為大家分享一篇對(duì)Python3中列表乘以某一個(gè)數(shù)的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07python實(shí)現(xiàn)簡(jiǎn)單http服務(wù)器功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單http服務(wù)器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09關(guān)于Java中RabbitMQ的高級(jí)特性
這篇文章主要介紹了關(guān)于Java中RabbitMQ的高級(jí)特性,MQ全稱為Message Queue,即消息隊(duì)列,"消息隊(duì)列"是在消息的傳輸過(guò)程中保存消息的容器,它是典型的:生產(chǎn)者、消費(fèi)者模型,生產(chǎn)者不斷向消息隊(duì)列中生產(chǎn)消息,消費(fèi)者不斷的從隊(duì)列中獲取消息,需要的朋友可以參考下2023-07-07python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a
在本篇文章里小編給大家整理了一篇關(guān)于python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a,有需要的朋友們可以學(xué)習(xí)參考下。2020-12-12