在python使用matplotlib的時(shí)候需要設(shè)置一些內(nèi)容才能正確的顯示中文,不然會(huì)出現(xiàn)一些報(bào)錯(cuò),那么怎么設(shè)置才能避免這些報(bào)錯(cuò)呢?來(lái)看小編是怎么做的。
一、前言
啪地一下點(diǎn)進(jìn)來(lái),很快呀~~
matplotlib是 Python 優(yōu)秀的數(shù)據(jù)可視化第三方庫(kù),matplotlib是基于 numpy 的一套 Python 工具包。這個(gè)包提供了豐富的數(shù)據(jù)繪圖工具,主要用于繪制一些統(tǒng)計(jì)圖形。
Matplotlib庫(kù)由各種可視化類構(gòu)成,內(nèi)部結(jié)構(gòu)復(fù)雜,受 Matlab 啟發(fā) matplotlib.pyplot 是繪制各類可視化圖形的命令子庫(kù),相當(dāng)于快捷方式。
import matplotlib.pyplot as plt
可 matplotlib 并不支持中文顯示。有中文顯示會(huì)出現(xiàn)如下問(wèn)題:
# -*- coding: UTF-8 -*- """ @Author :葉庭云 @公眾號(hào) :修煉Python @CSDN :https://yetingyun.blog.csdn.net/ 三折線 黑白灰風(fēng)格 標(biāo)簽label 標(biāo)記點(diǎn)形狀 """ import matplotlib.pyplot as plt # 生成x軸數(shù)據(jù) 列表推導(dǎo)式 x_data = [i for i in range(0, 55, 5)] # 構(gòu)造y軸數(shù)據(jù) y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09] y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18] y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3] # 設(shè)置圖形顯示風(fēng)格 plt.style.use('ggplot') # 設(shè)置figure大小 像素 plt.figure(figsize=(8, 5), dpi=100) # 繪制三條折線 點(diǎn)的形狀 顏色 標(biāo)簽:用于圖例顯示 plt.plot(x_data, y_data1, marker='^', color="k", label="設(shè)備1") plt.plot(x_data, y_data2, marker="o", color="k", label="設(shè)備2") plt.plot(x_data, y_data3, marker="s", color="k", label="設(shè)備3") # x y 軸標(biāo)簽 字體大小 plt.xlabel("時(shí)間周期/min", fontsize=13) plt.ylabel("直接信任度值", fontsize=13) # 顯示圖例 plt.legend() # 保存圖片 展示show plt.savefig("折線圖01.png", dpi=200) plt.show()
可 matplotlib 并不支持中文顯示。有中文顯示會(huì)出現(xiàn)如下問(wèn)題:
# -*- coding: UTF-8 -*- """ @Author :葉庭云 @公眾號(hào) :修煉Python @CSDN :https://yetingyun.blog.csdn.net/ 三折線 黑白灰風(fēng)格 標(biāo)簽label 標(biāo)記點(diǎn)形狀 """ import matplotlib.pyplot as plt # 生成x軸數(shù)據(jù) 列表推導(dǎo)式 x_data = [i for i in range(0, 55, 5)] # 構(gòu)造y軸數(shù)據(jù) y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09] y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18] y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3] # 設(shè)置圖形顯示風(fēng)格 plt.style.use('ggplot') # 設(shè)置figure大小 像素 plt.figure(figsize=(8, 5), dpi=100) # 繪制三條折線 點(diǎn)的形狀 顏色 標(biāo)簽:用于圖例顯示 plt.plot(x_data, y_data1, marker='^', color="k", label="設(shè)備1") plt.plot(x_data, y_data2, marker="o", color="k", label="設(shè)備2") plt.plot(x_data, y_data3, marker="s", color="k", label="設(shè)備3") # x y 軸標(biāo)簽 字體大小 plt.xlabel("時(shí)間周期/min", fontsize=13) plt.ylabel("直接信任度值", fontsize=13) # 顯示圖例 plt.legend() # 保存圖片 展示show plt.savefig("折線圖01.png", dpi=200) plt.show()
需要我們手動(dòng)一下下設(shè)置~~,才能解決中文顯示的問(wèn)題。
二、解決方法
1. 方式一
from matplotlib.font_manager import FontProperties # 導(dǎo)入FontProperties font = FontProperties(fname="SimHei.ttf", size=14) # 設(shè)置字體 # 哪里需要顯示中文就在哪里設(shè)置
# -*- coding: UTF-8 -*- """ @Author :葉庭云 @公眾號(hào) :修煉Python @CSDN :https://yetingyun.blog.csdn.net/ 三折線 黑白灰風(fēng)格 標(biāo)簽label 標(biāo)記點(diǎn)形狀 """ import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties # 步驟一 # 生成x軸數(shù)據(jù) 列表推導(dǎo)式 x_data = [i for i in range(0, 55, 5)] # 構(gòu)造y軸數(shù)據(jù) y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09] y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18] y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3] # 設(shè)置圖形顯示風(fēng)格 plt.style.use('ggplot') font = FontProperties(fname="SimHei.ttf", size=14) # 步驟二 # 設(shè)置figure大小 像素 plt.figure(figsize=(8, 5), dpi=100) # 繪制三條折線 點(diǎn)的形狀 顏色 標(biāo)簽:用于圖例顯示 plt.plot(x_data, y_data1, marker='^', color="k", label="設(shè)備1") plt.plot(x_data, y_data2, marker="o", color="k", label="設(shè)備2") plt.plot(x_data, y_data3, marker="s", color="k", label="設(shè)備3") # x y 軸標(biāo)簽 字體大小 plt.xlabel("時(shí)間周期/min", fontsize=13, fontproperties=font) plt.ylabel("直接信任度值", fontsize=13, fontproperties=font) # 顯示圖例 plt.legend(prop=font) # 保存圖片 展示show plt.savefig("折線圖01.png", dpi=200) plt.show()
結(jié)果如下:
2. 方式二
通過(guò) fontdict 字典參數(shù)來(lái)設(shè)置
fontdict={"family": "KaiTi", "size": 15, "color": "r"}
# -*- coding: UTF-8 -*- """ @Author :葉庭云 @公眾號(hào) :修煉Python @CSDN :https://yetingyun.blog.csdn.net/ 三折線 黑白灰風(fēng)格 標(biāo)簽label 標(biāo)記點(diǎn)形狀 """ import matplotlib.pyplot as plt # 生成x軸數(shù)據(jù) 列表推導(dǎo)式 x_data = [i for i in range(0, 55, 5)] # 構(gòu)造y軸數(shù)據(jù) y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09] y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18] y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3] # 設(shè)置圖形顯示風(fēng)格 plt.style.use('ggplot') # 設(shè)置figure大小 像素 plt.figure(figsize=(8, 5), dpi=100) # 繪制三條折線 點(diǎn)的形狀 顏色 標(biāo)簽:用于圖例顯示 plt.plot(x_data, y_data1, marker='^', color="k", label="設(shè)備1") plt.plot(x_data, y_data2, marker="o", color="k", label="設(shè)備2") plt.plot(x_data, y_data3, marker="s", color="k", label="設(shè)備3") # x y 軸標(biāo)簽 字體大小 plt.xlabel("時(shí)間周期/min", fontsize=13, fontdict={"family": "KaiTi", "size": 15, "color": "r"}) plt.ylabel("直接信任度值", fontsize=13, fontdict={"family": "KaiTi", "size": 15, "color": "k"}) # 顯示圖例 plt.legend(prop={'family': 'SimHei', 'size': 16}) # 保存圖片 展示show plt.savefig("折線圖01.png", dpi=200) plt.show()
3. 方式三
改變?nèi)值淖煮w
# matplotlib其實(shí)是不支持顯示中文的 顯示中文需要一行代碼設(shè)置字體 mpl.rcParams['font.family'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False # 步驟二(解決坐標(biāo)軸負(fù)數(shù)的負(fù)號(hào)顯示問(wèn)題)
# -*- coding: UTF-8 -*- """ @Author :葉庭云 @公眾號(hào) :修煉Python @CSDN :https://yetingyun.blog.csdn.net/ 三折線 黑白灰風(fēng)格 標(biāo)簽label 標(biāo)記點(diǎn)形狀 """ import matplotlib.pyplot as plt import matplotlib as mpl # 生成x軸數(shù)據(jù) 列表推導(dǎo)式 x_data = [i for i in range(0, 55, 5)] # 構(gòu)造y軸數(shù)據(jù) y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09] y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18] y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3] # matplotlib其實(shí)是不支持顯示中文的 顯示中文需要一行代碼設(shè)置字體 mpl.rcParams['font.family'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False # 步驟二(解決坐標(biāo)軸負(fù)數(shù)的負(fù)號(hào)顯示問(wèn)題) # 設(shè)置圖形顯示風(fēng)格 plt.style.use('ggplot') # 設(shè)置figure大小 像素 plt.figure(figsize=(8, 5), dpi=100) # 繪制三條折線 點(diǎn)的形狀 顏色 標(biāo)簽:用于圖例顯示 plt.plot(x_data, y_data1, marker='^', color="k", label="設(shè)備1") plt.plot(x_data, y_data2, marker="o", color="k", label="設(shè)備2") plt.plot(x_data, y_data3, marker="s", color="k", label="設(shè)備3") # x y 軸標(biāo)簽 字體大小 plt.xlabel("時(shí)間周期/min", fontsize=13) plt.ylabel("直接信任度值", fontsize=13) # 顯示圖例 plt.legend() # 保存圖片 展示show plt.savefig("折線圖01.png", dpi=200) plt.show()
結(jié)果如下:
4. 方式四
同樣也是全局改變字體的方法
font = {'family' : 'SimHei', 'weight' : 'bold', 'size' : '16'} plt.rc('font', **font) # 步驟一(設(shè)置字體的更多屬性) plt.rc('axes', unicode_minus=False) # 步驟二(解決坐標(biāo)軸負(fù)數(shù)的負(fù)號(hào)顯示問(wèn)題)
# -*- coding: UTF-8 -*- """ @Author :葉庭云 @公眾號(hào) :修煉Python @CSDN :https://yetingyun.blog.csdn.net/ 三折線 黑白灰風(fēng)格 標(biāo)簽label 標(biāo)記點(diǎn)形狀 """ import matplotlib.pyplot as plt # 生成x軸數(shù)據(jù) 列表推導(dǎo)式 x_data = [i for i in range(0, 55, 5)] # 構(gòu)造y軸數(shù)據(jù) y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09] y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18] y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3] font = {'family' : 'SimHei', 'weight' : 'bold', 'size' : '16'} plt.rc('font', **font) # 步驟一(設(shè)置字體的更多屬性) plt.rc('axes', unicode_minus=False) # 步驟二(解決坐標(biāo)軸負(fù)數(shù)的負(fù)號(hào)顯示問(wèn)題) # 設(shè)置圖形顯示風(fēng)格 plt.style.use('ggplot') # 設(shè)置figure大小 像素 plt.figure(figsize=(8, 5), dpi=100) # 繪制三條折線 點(diǎn)的形狀 顏色 標(biāo)簽:用于圖例顯示 plt.plot(x_data, y_data1, marker='^', color="k", label="設(shè)備1") plt.plot(x_data, y_data2, marker="o", color="k", label="設(shè)備2") plt.plot(x_data, y_data3, marker="s", color="k", label="設(shè)備3") # x y 軸標(biāo)簽 字體大小 plt.xlabel("時(shí)間周期/min", fontsize=13) plt.ylabel("直接信任度值", fontsize=13) # 顯示圖例 plt.legend() # 保存圖片 展示show plt.savefig("折線圖01.png", dpi=200) plt.show()
結(jié)果如下:
三、總結(jié)
- 方式一、方式二是哪里需要中文顯示才設(shè)置,且不會(huì)污染全局字體設(shè)置,更靈活。
- 方式三、方式四不改變?nèi)值淖煮w設(shè)置,一次設(shè)置,多次使用,更方便。
附常用字體如下:
- 宋體:SimSun
- 黑體:SimHei
- 微軟雅黑:Microsoft YaHei
- 微軟正黑體:Microsoft JhengHei
- 新宋體:NSimSun
- 新細(xì)明體:PMingLiU
- 細(xì)明體:MingLiU
- 標(biāo)楷體:DFKai-SB
- 仿宋:FangSong
- 楷體:KaiTi
- 隸書(shū):LiSu
- 幼圓:YouYuan
- 華文細(xì)黑:STXihei
- 華文楷體:STKaiti
- 華文宋體:STSong
- 華文中宋:STZhongsong
- 華文仿宋:STFangsong
- 方正舒體:FZShuTi
- 方正姚體:FZYaoti
- 華文彩云:STCaiyun
- 華文琥珀:STHupo
- 華文隸書(shū):STLiti
- 華文行楷:STXingkai
- 華文新魏:STXinwei
以上就是python設(shè)置 matplotlib 正確顯示中文的四種方式,更多matplotlib相關(guān)資料請(qǐng)關(guān)注W3Cschool其它相關(guān)文章!