Python常見庫matplotlib學(xué)習(xí)筆記之畫圖文字的中文顯示
系列文章目錄
- 第一章 Python常見庫matplotlib之畫圖文字的中文顯示
- 第二章 Python常見庫matplotlib之畫圖中各個(gè)模塊的含義及修改方式
- 第三章 Python常見庫matplotlib之多個(gè)子圖繪圖
前言
在數(shù)據(jù)可視化時(shí),常常需要使用圖例來解釋圖中不同元素的含義。在論文寫作時(shí)尤其是畢業(yè)論文寫作時(shí),需要圖中文字都顯示中文,數(shù)字都用新羅馬體。然而,matplotlib庫默認(rèn)是不支持中文顯示的,因此在繪制圖例時(shí),需要進(jìn)行一些設(shè)置才能顯示中文。本篇文章將介紹如何使用matplotlib庫繪制中文圖例。
一、matplotlib是什么?
Matplotlib是一個(gè)用于創(chuàng)建可視化圖表的Python庫,它支持多種圖表類型,包括線圖、散點(diǎn)圖、條形圖、餅圖、3D圖等,是數(shù)據(jù)分析、科學(xué)計(jì)算和工程應(yīng)用中最常用的可視化工具之一。Matplotlib庫廣泛用于Python的數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、科學(xué)計(jì)算等領(lǐng)域,以及研究、教育和工業(yè)生產(chǎn)中。它是一個(gè)開源軟件,可以在Python的多個(gè)版本中使用。
matplotlib庫的安裝很簡單
pip install matplotlib
本文使用的matplotlib版本為3.6.2。可以輸入下面的命令直接安裝該版本。
pip install matplotlib==3.6.2
二、使用方法
以下面一段簡單代碼為示例,來講述如何改變繪圖中的文字。
import numpy as np
import matplotlib.pyplot as plt
# 繪制曲線
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label=u'正弦曲線')
plt.plot(x, y2, label=u'余弦曲線')
plt.xlabel('橫軸')
plt.ylabel('縱軸')
plt.title('函數(shù)')
# 添加圖例
plt.legend(loc='upper right')
# 顯示圖像
plt.show()上面這段代碼實(shí)現(xiàn)了繪制正弦和余弦曲線在同一幅圖上,其顯示結(jié)果是下圖這樣的

可見如果不添加字體設(shè)置,橫縱坐標(biāo)及圖例的中文都是方框。
1.尋找所需要的字體
(1)下載字體
linux一般是不會(huì)自帶微軟雅黑、宋體、新羅馬這樣的字體的。我們需要去找。如果你身邊有windows系統(tǒng)的電腦,可以去下面幾個(gè)路徑下去拷貝
| 字體名稱 | 路徑 |
|---|---|
| 微軟雅黑 | C:\Windows\Fonts\msyh.ttc |
| 宋體 | C:\Windows\Fonts\simsun.ttc |
| 新羅馬 | C:\Windows\Fonts\TIMES.TTF |
懶得話也可以下載我上傳的字體包
提取碼: ehtw
(2)放置到合適路徑
linux mint下的字體文件一般放在“/usr/share/fonts/truetype”,如果該目錄不存在,則可以手動(dòng)創(chuàng)建。一般字體文件都會(huì)在truetype文件夾下還有一層文件夾,才到字體文件。

以dejavu為例,就是這樣的。

所以我們也可以創(chuàng)建一個(gè)yahei的文件夾放置其字體文件
# 創(chuàng)建yahei文件夾 sudo mkdir /usr/share/fonts/truetype/yahei # 拷貝字體文件到該文件夾下 sudo cp msyh.ttc /usr/share/fonts/truetype/yahei/
(3)刷新字體緩存
sudo fc-cache -f -v
(4)確認(rèn)字體文件是否已經(jīng)安裝
在終端輸入下面的代碼,可以看到微軟雅黑的安裝路徑
fc-list | grep -i yahei
同理,可以查看新羅馬的
fc-list | grep TIMES
查看宋體的
fc-list | grep SUN
(5)刪除matplotlib的緩存
這一步非常重要,有很多人都會(huì)忘記
rm rf ~/.cache/matplotlib
2.設(shè)置字體
(1)全局設(shè)置字體
將下面代碼加在之前的代碼前面即可。
# 設(shè)置字體 plt.rcParams['font.family'] = 'Microsoft YaHei'
最終代碼如下:
import numpy as np
import matplotlib.pyplot as plt
# 設(shè)置字體
plt.rcParams['font.family'] = 'Microsoft YaHei'
# plt.rcParams['font.family'] = 'SimSun'
# plt.rcParams['font.family'] = 'Times New Roman'
# 繪制曲線
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label=u'正弦曲線')
plt.plot(x, y2, label=u'余弦曲線')
plt.xlabel('橫軸')
plt.ylabel('縱軸')
plt.title('函數(shù)')
# 添加圖例
plt.legend(loc='upper right')
# 顯示圖像
plt.show()運(yùn)行代碼,看到繪圖出現(xiàn)中文了。

把plt.rcParams['font.family'] = 'Microsoft YaHei'這行注釋,替換成plt.rcParams['font.family'] = 'SimSun'便會(huì)顯示宋體。

如果開啟plt.rcParams['font.family'] = 'Times New Roman'。我們發(fā)現(xiàn)又出現(xiàn)框框了,顯然新羅馬不支持中文顯示,只有數(shù)字變成新羅馬體了。

對不同位置的目標(biāo),設(shè)置不同的字體,可以如下代碼修改
import numpy as np
import matplotlib.pyplot as plt
# 設(shè)置字體
plt.rcParams['font.family'] = 'SimSun'
plt.rcParams['font.family'] = 'Times New Roman'
# 繪制曲線
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label=u'正弦曲線')
plt.plot(x, y2, label=u'余弦曲線')
# 設(shè)置橫軸字體
plt.xlabel('橫軸', fontfamily='SimSun')
# 設(shè)置縱軸字體
plt.ylabel('縱軸', fontfamily='SimSun')
# 設(shè)置標(biāo)題字體
plt.title('函數(shù)', fontfamily='SimSun')
# 設(shè)置刻度字體
plt.xticks(fontfamily='Times New Roman')
plt.yticks(fontfamily='Times New Roman')
# 設(shè)置圖例字體
plt.legend(loc='upper right', fontsize=12, edgecolor='black', fancybox=False, framealpha=1, prop={'family': 'SimSun'})
# 顯示圖像
plt.show()最終顯示結(jié)果

(2)局部設(shè)置字體(強(qiáng)烈推薦)
以上的設(shè)置到一臺(tái)新機(jī)器上就得重新拷貝或者下載字體文件,似乎有點(diǎn)麻煩?,F(xiàn)在介紹第二種方法,直接把自己放在運(yùn)行程序或者腳本的同級(jí)目錄下。這樣字體跟著代碼走,到一個(gè)新環(huán)境下只要安裝了matplotlib就可以直接運(yùn)行。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 指定字體
font_path = 'SIMSUN.TTC' # 這里也可以填其他字體的絕對路徑,只填名稱表示本程序與該字體在同一級(jí)目錄下
font_prop = fm.FontProperties(fname=font_path, size=12)
en_font_path = 'TIMES.TTF' # 這里也可以填其他字體的絕對路徑,只填名稱表示本程序與該字體在同一級(jí)目錄下
en_font_prop = fm.FontProperties(fname=en_font_path, size=12)
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label=u'正弦曲線')
plt.plot(x, y2, label=u'余弦曲線')
plt.xlabel('橫軸', fontproperties=font_prop)
plt.ylabel('縱軸', fontproperties=font_prop)
plt.title('函數(shù)', fontproperties=font_prop)
plt.xticks(fontproperties=en_font_prop)
plt.yticks(fontproperties=en_font_prop)
plt.legend(loc='upper right', fontsize=12, edgecolor='black', fancybox=False, framealpha=1, prop=font_prop)
plt.show()查看顯示結(jié)果

總結(jié)
本文簡單介紹了如何使用matplotlib庫添加中文字體顯示的辦法。一種為全局設(shè)置的,一種為當(dāng)前程序設(shè)置的。
到此這篇關(guān)于Python常見庫matplotlib學(xué)習(xí)筆記之畫圖文字的中文顯示的文章就介紹到這了,更多相關(guān)matplotlib畫圖文字中文顯示內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
學(xué)會(huì)這29個(gè)常用函數(shù),你就是Pandas專家
Pandas?無疑是?Python?處理表格數(shù)據(jù)最好的庫之一,但是很多新手無從下手,這里總結(jié)出最常用的?29?個(gè)函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-11-11
使用Python和xlwt向Excel文件中寫入中文的實(shí)例
下面小編就為大家分享一篇使用Python和xlwt向Excel文件中寫入中文的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
pytest-sugar?執(zhí)行過程中顯示進(jìn)度條的腳本分享
Pytest-sugar是一款用來改善控制臺(tái)顯示的插件,增加了進(jìn)度條顯示,使得在用例執(zhí)行過程中可以看到進(jìn)度條,而且進(jìn)度條是根據(jù)用例是否通過標(biāo)注不同顏色,非常醒目,接下來通過本文給大家分享下pytest?sugar?顯示進(jìn)度條的腳本,感興趣的朋友一起看看吧2022-12-12
基于python實(shí)現(xiàn)rpc遠(yuǎn)程過程調(diào)用
本文主要介紹了基于python實(shí)現(xiàn)rpc遠(yuǎn)程過程調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
python動(dòng)態(tài)網(wǎng)站爬蟲實(shí)戰(zhàn)(requests+xpath+demjson+redis)
本文主要介紹了python動(dòng)態(tài)網(wǎng)站爬蟲實(shí)戰(zhàn)(requests+xpath+demjson+redis),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Python2.5/2.6實(shí)用教程 入門基礎(chǔ)篇
本文方便有經(jīng)驗(yàn)的程序員進(jìn)入Python世界.本文適用于python2.5/2.6版本.2009-11-11

