matplotlib如何设置中文为宋体,英文为新罗马Times New Roman

问题描述

论文附图通常需要将中文设置为宋体,英文设置为新罗马字体(Times New Roman)。matplotlib中可以这样设置字体:

plt.rcParams['font.sans-serif'] = ['SimSun']
plt.rcParams['font.sans-serif'] = ['Times New Roman']

但是这样设置后者会将前者覆盖,只会显示一种字体。以下是摸索出来的一种不太优雅的解决方案,但可以解决问题。(目前没探索到更优的方案)

解决方案

以下是一个简单的示例,可以作为一个代码模板使用。代码中展示了以下三种情况:

  • 对于中文字符,正常直接使用引号括起来即可;
  • 对于英文字符,传入参数fontproperties='Times New Roman'即可;
  • 对于中英文混合字符,将英文字符的部分单独使用$\mathrm{}$括起来。(若不写\mathrm{}则会是斜体的效果)
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 首先配置字体信息
config = {
    "font.family": 'serif',
    "font.size": 12,
    "mathtext.fontset": 'stix',
    "font.serif": ['SimSun'],
}
rcParams.update(config)

x = [1, 2, 3]
y = [1, 2, 3]

# 将刻度显示设置为新罗马字体
plt.xticks(fontproperties='Times New Roman')
plt.yticks(fontproperties='Times New Roman')

# 中英文字符混合
plt.title('示意图$\mathrm{ABC}$', size=18)
# 仅包含中文字符
plt.xlabel('日期', size=14)
# 仅包含英文字符
plt.ylabel('y', fontproperties='Times New Roman', size=14)

plt.plot(x, y)
plt.show()

示例图

以上代码的运行结果如下所示:
在这里插入图片描述
成功实现中文宋体,英文Times New Roman。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值