如何在Python-matplotlib绘图中使用中文粗体

如何在matplotlib中使用中文粗体

我发现,在使用matplotlib画图时,当不设置中文字体(无需显示中文)时,在plt.title,ptl.xlabel等函数中,使用fontweight='bold'参数,可以成功使其加粗,如下图所示。
在这里插入图片描述
但当需要使用中文时,需使用如下代码设置中文字体:

config = {
    "font.family":'serif',
    "font.size": 20,
    "font.serif":'KaiTi',
    "axes.unicode_minus":False,
}
plt.rcParams.update(config)

此时,无论我们是在config中添加'font.weight':"bold",设置全局中文;亦或是如之前所述使用fontweight='bold'参数,单独设置某个标题加粗,均没有变化(且其中英文也一并使用了中文字体),如下图所示:
在这里插入图片描述

1. 仅设置中英混合标题中的英文粗体

在设置中中文字体时,可设置公式字体为"stix",其是一种类似"Times New Roman"的字体),如下所示:

config = {
    "font.family":'serif',
    "font.size": 20,
    "mathtext.fontset":'stix',
    "font.serif":'KaiTi',
    "axes.unicode_minus":False,
}
plt.rcParams.update(config)

此时,对于标题中的英文,我们可以通过将其表示为公式,将其设置为粗体,并且同时是"Times New Roman"字体,代码与结果如下所示:

# 示例数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 绘图
plt.plot(x, y)

# 添加标题和标签,使用 serif 字体并设置为粗体
plt.title(r'$\mathbf{Title}$标题',size=20)  # 正体加粗
plt.xlabel(r'$\mathrm{X}$坐标轴',size=16)  # 正体
plt.ylabel(r'$Y$坐标轴',size=16)  # 斜体

# 显示图形
plt.show()

在这里插入图片描述

2. 局部设置中文粗体

既然不能设置中文的某种字体为粗体,那就使用邪道方法,直接使用一种粗体中文字体。我选择的是方正粗楷简体,可在该网站下载,即可得到FZCKJW.TTF字体文件。

此时使用如下代码,即可在需要的位置,将其设置为中文粗体(其他位置仍保持为中文正体或英文New Times Roman)。

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 指定自定义字体文件路径
custom_font_path = r'xxx/FZCKJW.TTF'

# 创建 FontProperties 对象加载自定义字体
custom_font = FontProperties(fname=custom_font_path)

# 设置全局字体参数
config = {
    "font.family":'serif',
    "font.size": 20,
    "mathtext.fontset":'stix',
    "font.serif":'KaiTi',
    "axes.unicode_minus":False,
}
plt.rcParams.update(config)

# 示例数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 绘图
plt.plot(x, y)

# 添加标题和标签,使用 serif 字体并设置为粗体
plt.title('Title标题', fontproperties=custom_font, fontsize=20)  # 中文粗体
plt.xlabel(r'$\mathbf{X}$轴标签', fontproperties=custom_font, fontsize=16)  # 英文Times New Roman字体
plt.ylabel(r'$\mathrm{Y}$轴标签', fontsize=16)  # 中文正体

# 显示图形
plt.show()

在这里插入图片描述

3. 如果不希望每次都在开头导入字体

该方法需要每次在程序开头都设置字体文件路径,并将其导入。如果希望能像其他系统字体那样,直接使用其字体名称来设置字体,如plt.ylabel('Y轴标签',fontname='SimSun')设置宋体,可将其添加到系统字体中,方法如下所示:

  1. 将TTF字体文件复制到C:\Windows\Fonts中;
  2. 打开注册表编辑器(Win+R,输入运行 regedit 命令);
  3. 导航到以下注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
  4. 在右侧窗格,创建一个新的字符串值,名称为字体的显示名称(例如,方正粗楷简体 (TrueType));
  5. 将数据设置为字体文件的文件名(例如,FZCKJW.TTF);
  6. 保存并关闭注册表编辑器。

这样,就成功在系统中添加注册了新的字体,可以在Word字体中看到。

但这之后并不能直接在Python中使用该字体,需要重新加载字体缓存,方法如下:

  1. 删除C:\Users\NAME.matplotlib中最新的fontlist-v390.json文件(数字390可能不同)
  2. 重新加载编译器,运行如下代码,找到新添加的TTF文件,以及其对应名称:
import matplotlib.font_manager

# 获取系统中所有已知的字体列表
font_list = matplotlib.font_manager.findSystemFonts()

# 获取已知的字体名称列表
font_names = [matplotlib.font_manager.FontProperties(fname=f).get_name() for f in font_list]

# 打印所有字体名称
for i,font in enumerate(font_list):
    print(font,font_names[i])

本例中为FZCKJW.TTFFZCuKaiS-R-GB

之后,即可使用以下代码,设置局部中文粗体:

plt.ylabel(r'$\mathrm{Y}$轴标签',fontname='FZCuKaiS-R-GB', fontsize=16)

5. 设置全局中文粗体

进行第4节操作后,即可按照一般全局设置方法,设置全局中文粗体,如下所示:

config = {
    "font.family":'serif',
    "font.size": 20,
    "mathtext.fontset":'stix',
    "font.serif":'FZCuKaiS-R-GB',
    "axes.unicode_minus":False,
}
plt.rcParams.update(config)
  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值