Matplotlib 中文宋体 & 英文 Times New Roman 设置

安装宋体

查找plt安装目录:

locate -b '\mpl-data'

得到:

/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data

mpl-data文件夹下有个/fonts/ttf文件夹,将ttf格式的字体文件复制到此ttf文件夹下即可

sudo mv SimSun.ttf /usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/fonts/ttf

SimSun.ttf下载:https://github.com/micmro/Stylify-Me/blob/master/.fonts/SimSun.ttf

接下来删除当前用户matplotlib的缓冲文件:

rm -rf ~/.cache/matplotlib/*

中文设置

参考:Matplotlib 中英文及公式字体设置

原理:

  1. 使用fontproperties局部设置字体为宋体
  2. 英文放到公式中,使用stix字体,此字体非常接近于Times New Roman
  3. 其余字体为默认字体(坐标轴刻度等)
#coding:utf-8

import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams

# 全局设置字体及大小,设置公式字体即可,若要修改刻度字体,可在此修改全局字体
config = {
    "mathtext.fontset":'stix',
    # "font.family":'serif',
    # "font.serif": ['SimSun'],
    # "font.size": 15,
}
rcParams.update(config)

# 载入宋体
SimSun = FontProperties(fname='/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/fonts/ttf/SimSun.ttf')

x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x), label=u"宋体 $\mathrm{1}$") # 图例
plt.plot(x, np.cos(x), label=u"宋体 $\mathrm{2}$") # 图例


plt.title(u'宋体 $\mathrm{Times \; New \; Roman1}$', size=14, fontproperties=SimSun) # 局部设置中文为宋体,英文数字为Times New Roman
plt.xlabel(u'宋体 $\mathrm{Times \; New \; Roman2}$', size=14, fontproperties=SimSun)
plt.ylabel(u'宋体 $\mathrm{Times \; New \; Roman3}$', size=14, fontproperties=SimSun)
plt.text(3, 0.5, u"宋体 $\mathrm{12}$", size=14, fontproperties=SimSun) # 设置标注文字中文为宋体,英文数字为Times New Roman
plt.legend(prop={'family': 'SimSun', 'size': 12}) # 设置图例字体为宋体

# plt.axis('off') # 刻度仍为默认字体
plt.savefig("usestix.pdf", dpi=600, bbox_inches='tight') # 保存为pdf
# plt.savefig("usestix.svg") # 若使用了公式,直接导出的svg无法使用
os.system("pdf2svg usestix.pdf usestix.svg") # 将pdf转换为svg(若仅需要设置中文字体,则不需要使用pdf2svg进行转换)

plt.show()

转换为svg

plt导出的svg中不能有公式,因而先导出为pdf,然后将pdf转换为svg,有三种转换方式:

1、使用pdf2svg

  安装:sudo apt install pdf2svg

  优点:可直接在代码中转换

  缺点:文件尺寸稍大

2、使用AI

  优点:文件尺寸小

  缺点:需手动操作

3、使用inkscape

  文件尺寸最大,不建议使用

效果展示

Matplotlib 中文宋体 & 英文 Times New Roman 设置_第1张图片

你可能感兴趣的:(Linux,python,linux,matplotlib)