前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matplotlib自定义字体、字体设置总结

matplotlib自定义字体、字体设置总结

作者头像
python数据可视化之路
发布2023-10-30 17:02:32
4980
发布2023-10-30 17:02:32
举报

字体设置是规范图片内容的重要组成,本文内容:

1)如何查找matplotlib支持的字体

2)自定义字体运用到matplotlib中

3)matplotlib的FontProperties和font_dict应用场景

1.1 查看matplotlib支持的字体

代码语言:javascript
复制
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
    print(font.name, '-', font.fname) #输出字体名称和路径
    
---结果---
...
Bodoni MT - C:\Windows\Fonts\BOD_B.TTF
Malgun Gothic - C:\Windows\Fonts\malgun.ttf
Consolas - C:\Windows\Fonts\consolai.ttf
...

该方法输出的字体包括:matplotlib库自带的字体和系统已安装字体

系统已安装字体在:C:\Windows\Font 文件夹下

matplotlib自带字体在matplotlib安装路径的mpl-data\fonts\ttf文件夹下

系统已安装字体

1.2 在matplotlib中正确使用字体名

以“楷体”为例,如何在matplotlib中查找正确的使用名称?

1.在使用的字体文件上右击,选择属性

2.查看文件英文名称(注意大小写)和后缀名(是.ttf还是.TTF)。如楷体,对应英文名为"simkai",后缀名为".ttf“

3.根据英文名后缀名在matplotlib查找正确使用名称

代码语言:javascript
复制
for font in font_manager.fontManager.ttflist:
     if font.fname.split('\\')[-1] == 'simkai.ttf':
            print(font.name, '-', font.fname)
            
---结果---
KaiTi - C:\Windows\Fonts\simkai.ttf

结论:根据输出结果,如果在matplotlib中使用楷体,则字体名为”KaiTi"而不是"simkai"

2 使用自定义字体

现使用4种字体(新罗马、宋体、方正舒体、楷体)绘图,并将这四种字体使用到坐标轴上(使用1.2的第3步获取matplotlib正确使用的字体)

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import matplotlib 
matplotlib.rcParams['axes.unicode_minus'] =False  #使用中文字体(例如宋体、隶书、楷体等都不支持负号,需要添加此语句以支持)
#根据1.2第3步获取的正确4种字体使用名称:楷体、宋体、方正舒体、新罗马
font_ls = ['KaiTi', 'SimSun', 'FZShuTi', 'Times New Roman']
fig = plt.figure()
i = 0
x = np.linspace(-5, 5, 100)
y = np.sin(x)
for i in range(4):
    ax1 = fig.add_subplot(2, 2, i + 1)
    ax1.plot(x, y)
    #设置坐标轴字体格式
    plt.setp([ax1.get_xticklabels(), ax1.get_yticklabels()], fontproperties = font_ls[i], size = 10) 
    ax1.text(-5, -1, font_ls[i])
plt.show()

3 FontProperties和font_dict使用场景

FontProperties和font_dict都是用于设置绘图的字体格式,公有参数均有'family', 'size', 'weight'分别设置字体名称、大小和粗细,定义格式如下:

代码语言:javascript
复制
import matplotlib.font_manager as fm

fm1 = fm.FontProperties(family = 'Times New Roman', size = 20, weight = 'normal')
font1 = {'family': 'Times New Roman', 'size': 20, 'weight': 'normal'}

但FontProperties和font_dict使用场景略有不同:

方法

字体参数

参数内容

ax.set_xtickables,ax.set_ytickables

fontproperties

FontProperties实例或fontdict字典

ax.set_xticks,ax.set_yticks

fontproperties

FontProperties实例或fontdict字典

ax.set_xlabel,ax.set_ylabel,ax.text,ax.set_title

fontdict

fontdict字典

ax.legend

prop

fontdict字典

示例如下:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm

fm1 = fm.FontProperties(family = 'Times New Roman', size = 20, weight = 'normal')
font1 = {'family': 'Times New Roman', 'size': 20, 'weight': 'normal'}

fig = plt.figure()
ax1 = fig.add_subplot(111)
x = np.linspace(-5, 5, 100)
y = np.sin(x)

ax1.plot(x, y, label = 'sin(x)')
plt.setp([ax1.get_xticklabels(), ax1.get_yticklabels()], fontproperties = fm1) #两个都可用 
ax1.set_xlabel('X axis', fontdict = font1) #不可用FontProperties
ax1.set_ylabel('Y axos', fontdict = font1)
ax1.text(-5, -0.8, 'text', fontdict = font1) #不可用FontProperties
ax1.set_xticks(np.arange(-5, 5, 2), labels = ['A', 'B', 'C', 'D', 'E'], fontproperties = fm1) #两个都可用 
ax1.legend(prop = font1) #不可用FontProperties
ax1.set_title('sin function map', fontdict = font1) #不可用FontProperties

plt.show()

END

本文介绍了matplotlib自定义字体的使用以及如何使用系统自带字体,并对FontProperties和font_dict使用场景做出区别。限于笔者水平,如有错误,望请纠正,欢迎交流。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档