matplotlib原生字体库不包含宋体,中文会显示为方块,论文常见要求格式为中文宋体+英文/数字 times new roman ,9号字。大部分方法都是用比较接近的字体去替代或者全局中文字体再用latex设置英文和数字格式,都比较麻烦且效果一般。这里用了一个比较取巧的方法一劳永逸的解决这个问题。
解决思路:1、自定义中文宋体+英文times new roman的新字体,2、替换掉默认字体
1、生成新的字体文件
现成的字体文件
提取码: bgea
生成方法:
这里用了一个工具可以很简单的把两个字体合并为一个字体
下载(推荐SC2版本)软件后解压缩到任意文件夹,如下图:
在C:WindowsFonts中找到宋体和times new roman的字体文件
先选中中文宋体“simsun.ttf”按住Ctrl再选中英文times.ttf,按住times.ttf拖动到合并.dat上,开始合并
在文件夹中生成一个out.ttf文件,就是中文部分为宋体,英文和数字部分为times new roman的混合字体文件了。
查看一下
2、替换默认字体
查看matplotlib中字体存储路径
import matplotlib
print(matplotlib.matplotlib_fname())
找到“anacondalibsite-packagesmatplotlibmpl-datafonts tf”这个路径:
复制一份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
times new roman ,fontsize=9)
plt.xlabel( 宋体
times new roman12345 ,fontsize=9)
一劳永逸,之后画图只需要选择这个字体就可以了,超级方便,不需要P图了
暂无评论内容