python画图调用本地字体(彻底解决中文乱码问题)

font_manager

matplotlib中的字体文件被封装在font_manager这个子模块中,fontManager.ttflist这个列表涵盖了所有Matplotlib支持的字体。

>>> import matplotlib.pyplot as plt
>>> from matplotlib.font_manager import fontManager
>>> print(fontManager.ttflist[0])   #此为字体文件
<Font 'cmmi10' (cmmi10.ttf) normal normal 400 normal>

Font类中主要有7个基本属性:

‘fname’‘name’‘size’‘stretch’‘style’‘variant’‘weight’
存储路径字体名尺寸拉伸方式斜粗风格变体粗细

全局设置字体

若想全局设置字体,可通过更改plt.rcParams来实现,例如设为等线字体

plt.rcParams['font.sans-serif'] = 'DengXian'
plt.text(0,0,'测试',fontsize=20)
plt.show()

效果为

在这里插入图片描述

一般来说电脑中内置的字体文件都是数百记,很难逐一展示,所以接下来希望将前100个字体展示在一张图中。

然而rcParams对于并非坐标轴的属性,而是当前作图窗格的属性,若想在局部启用其他字体,可通过plt.text中的fontproperties参数来实现

import numpy as np
from matplotlib.font_manager import FontProperties
x,y  = np.indices([10,10]).reshape(2,100)/10
for i in range(100):
    font = fontManager.ttflist[i]
    plt.text(x[i],y[i],f"测试:{font.name}", 
    fontsize=10, ha='left', va='bottom',
    fontproperties = FontProperties(fname=font.fname))

plt.show()

得到测试字体如图所示

在这里插入图片描述

在作图时选择其中支持中文的字体,就不会出现中文乱码问题了。

字体列表

字体列表如下

STIXSizeFourSymSTIXNonUnicode
cmmi10DejaVu Sans Mono
STIXSizeTwoSymcmsy10
STIXGeneralDejaVu Serif
STIXGeneralDejaVu Sans
STIXSizeOneSymSTIXSizeTwoSym
DejaVu SerifSTIXSizeOneSym
cmss10STIXNonUnicode
DejaVu Sans MonoDejaVu Sans Mono
STIXNonUnicodeDejaVu Sans
cmex10cmtt10
cmr10DejaVu Serif
DejaVu Sans DisplaySTIXGeneral
DejaVu SansDejaVu Sans
STIXSizeThreeSymSTIXGeneral
STIXNonUnicodeDejaVu Sans Mono
DejaVu SerifSTIXSizeFourSym
STIXSizeFiveSymcmb10
STIXSizeThreeSymDejaVu Serif Display
Microsoft Sans SerifHGBS_CNKI
Palatino LinotypeConstantia
Nirmala UIHGXC_CNKI
Microsoft Yi BaitiVerdana
Franklin Gothic MediumHGDGY_CNKI
HGXL_CNKIConsolas
Segoe UI VariableSegoe Script
Segoe UIMalgun Gothic
Segoe MDL2 AssetsLeelawadee UI
Segoe UICandara
Leelawadee UICorbel
Palatino LinotypeSegoe UI Emoji
Lucida ConsoleLucida Sans Unicode
SimSunMicrosoft YaHei
HGCH_CNKIHGLS_CNKI
Microsoft JhengHeiArial
ConstantiaHGWYS_CNKI
Segoe UIConsolas
WingdingsHGLB_CNKI
Courier NewHGY4_CNKI
HGHB_CNKITahoma
Comic Sans MSCalibri
VerdanaHGY1_CNKI
Times New RomanVerdana
Microsoft HimalayaCandara
Segoe PrintCourier New
CandaraConstantia
EbrimaGadugi
Segoe ScriptYu Gothic
HGDH_CNKICalibri
SitkaHGY3_CNKI
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值