matplotlib绘图实现中文宋体和英文Times New Roman

之前看了不少博客,实现了在matplotlib中分别设置中文宋体和英文Times New Roman,下面这个图就用这种方式,将坐标轴刻度设置为Times New Roman,坐标轴标题显示为宋体。

但是这种方法不能解决当中文和英文在一起的时候的字体区分问题。这个图里的图例和ylabel里的这个百分号就存在这个问题。

matplotlib绘图实现中文宋体和英文Times New Roman_第1张图片

 查了一圈资料,没发现特别完美的解决方法,只能依靠这个回答等效替代的方法来近似解决这个问题,即寻找一种中文字体像宋体、英文字体像Times New Roman的字体。根据这个回答,感觉华光书宋的效果最佳,所以将全局字体设置为华光书宋,即可解决这个问题。以下记录解决步骤:

1. 找到系统里的华光书宋,并复制到matplotlib的font文件夹下。

1.1系统字体目录:C:\Windows\Fonts,找到其中的这个图标:(如果没有的话去网上下一个,然后进行下一步)

matplotlib绘图实现中文宋体和英文Times New Roman_第2张图片 

1.2matplotlib字体目录,如果不知道的话,可以通过以下代码查询:

matplotlib.matplotlib_fname()

比如我的输出为:'d:\\Program Files\\Anaconda3\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'

然后将上面那个字体文件,拷到fonts目录下的ttf文件夹里面。其实拷过去就发现,这个字体文件实际的名字叫做HGSS_CNKI.TTF,记住这个名字,后面要用

2. 修改matplotlib的matplotlibrc文件

2.1 回到1.2中的d:\Program Files\Anaconda3\lib\site-packages\matplotlib\mpl-data\目录,用文本编辑器打开matplotlibrc这个文件

2.2 搜索font.serif,找到下图位置:

matplotlib绘图实现中文宋体和英文Times New Roman_第3张图片

将华光书宋字体的名称“HGSS_CNKI”添加到font.serif这一行。

3. 清除matplotlib缓存,重启IDE

3.1 用以下代码查询matplotlib的缓存位置

print(matplotlib.get_cachedir())

 比如我的是:C:\Users\Administrator\.matplotlib

打开这个目录,直接把这个.matplotlib文件夹删掉

3.2 重启以下python IDE

3.3 用rcParams设置一下全局字体,把我们的华光书宋加进去

config = {
    'font.family':'HGSS_CNKI',
}
plt.rcParams.update(config)

4. 愉快画图!

以下是实现效果,后续没有任何位置再重复设置字体了。

matplotlib绘图实现中文宋体和英文Times New Roman_第4张图片

 

你可能感兴趣的:(matplotlib)