解决matplotlib(plt)的中英文字体混显问题

matplotlib画图时,每句文本只使用一种字体进行显示。Times New Roman英文字体和宋体为常用字体,为同时显示这两种字体,翻阅了很多文章,终于找到一种完美的解决方案。即:合并中英文字体。

一、合并步骤描述

  1. 首先,下载并解压合并工具(工具链接: GitHub - nowar-fonts/Warcraft-Font-Merger: Warcraft Font Merger,魔兽世界字体合并/补全工具。)。
  2. 其次,根据Github页面提示,合并新罗马字体(times.ttf)与宋体(simsun.ttc),两种字体在Win10系统下的文件夹位置为:"C:/Windows/Fonts"。合并后的字体文件路径可查看Github说明,默认为"out.ttf"。

为方便读者,给出合并这两种特定字体的批处理脚本(简化查找字体并拖动文件的步骤)。直接运行即可

  • 先在合并工具文件夹内,使用新建记事本文件然后改后缀名的方式,新建一个"a.bat"文件,注意后缀名是bat,不是txt!否则无法通过双击运行该文件。
  • 右键编辑bat文件,将以下内容复制到bat文件里,并保存该文件
%~d0
cd "%~dp0"

.\otfccdump.exe --ignore-hints -o base.otd "C:\Windows\fonts\times.ttf"
.\otfccdump.exe --ignore-hints -o ext.otd "C:\Windows\fonts\simsun.ttc"

.\merge-otd.exe base.otd ext.otd

.\otfccbuild.exe -q -O3 -o tnw+simsun.ttf base.otd

del base.otd ext.otd

pause
  • 双击运行"a.bat"文件,合并后的文件在文件夹内,名称为"tnw+simsun.ttf"

注:以上工具提供和合并后字体的蓝秦云链接。合并工具合并字体

二、效果查看

通过编写Python代码检查合并效果: 

from matplotlib import font_manager
from matplotlib import rcParams
import os


# 字体加载
font_path = "Your font file's path."
font_manager.fontManager.addfont(font_path)
prop = font_manager.FontProperties(fname=font_path)
# print(prop.get_name())  # 显示当前使用字体的名称

# 字体设置
rcParams['font.family'] = 'sans-serif' # 使用字体中的无衬线体
rcParams['font.sans-serif'] = prop.get_name()  # 根据名称设置字体
rcParams['font.size'] = 10 # 设置字体大小
rcParams['axes.unicode_minus'] = False # 使坐标轴刻度标签正常显示正负号


# 图片显示
if __name__ == '__main__':
    import matplotlib.pyplot as plt
    plt.title("宋体Times New Roman")
    plt.show()

参考阅读:知乎

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清纯世纪

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值