赞
踩
matplotlib原生字体库不包含宋体,中文会显示为方块,论文常见要求格式为中文宋体+英文/数字 times new roman ,9号字。大部分方法都是用比较接近的字体去替代或者全局中文字体再用latex设置英文和数字格式,都比较麻烦且效果一般。这里用了一个比较取巧的方法一劳永逸的解决这个问题。
解决思路:1、自定义中文宋体+英文times new roman的新字体,2、替换掉默认字体
1、生成新的字体文件
现成的字体文件:链接: https://pan.baidu.com/s/1sPaQQaGqqqJXizZCfLyKzQ?pwd=bgea 提取码: bgea 复制这段内容后打开百度网盘手机App,操作更方便哦
生成方法:
这里用了一个工具
https://github.com/nowar-fonts/Warcraft-Font-Merger
可以很简单的把两个字体合并为一个字体
下载(推荐SC2版本)软件后解压缩到任意文件夹,如下图:
在C:\Windows\Fonts中找到宋体和times new roman的字体文件
先选中中文宋体“simsun.ttf”按住Ctrl再选中英文times.ttf,按住times.ttf拖动到合并.dat上,开始合并
在文件夹中生成一个out.ttf文件,就是中文部分为宋体,英文和数字部分为times new roman的混合字体文件了。
查看一下
2、替换默认字体
查看matplotlib中字体存储路径
import matplotlib
print(matplotlib.matplotlib_fname())
找到“anaconda\lib\site-packages\matplotlib\mpl-data\fonts\ttf”这个路径:
复制一份cmex10.ttf这个字体文件
删除掉原本的cmex10.ttf文件,然后把上一步中生成的out.ttf复制到这个路径中,重命名为cmex10.ttf(注意这一步需要先关闭Python)
3、设置matplotlib中字体
第一种:
import matplotlib.pyplot as plt
from matplotlib import rcParams
plt.rcParams['font.family']=['cmex10']
第二种:
import matplotlib.pyplot as plt
from matplotlib import rcParams
config = {
"mathtext.fontset":'stix',
"font.family":'serif',
"font.serif":['cmex10'],
"font.size":9,
'axes.unicode_minus': False
}
rcParams.update(config)
效果:
import matplotlib.pyplot as plt
from matplotlib import rcParams
plt.figure(dpi=100)
x=[1,2,3,4,5]
y=[1,2,3,4,5]
plt.scatter(x,y)
plt.rcParams['font.family']=['cmex10']
plt.ylabel('宋体ABCD \n times new roman',fontsize=9)
plt.xlabel('宋体 \n times new roman12345',fontsize=9)
一劳永逸,之后画图只需要选择这个字体就可以了,非常方便,不需要P图了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。