整体而言,matplotlib对中文的支持还是不够理想,还不够灵活。
安装字体
网上很多教程都是直接设置字体,但如果连字体都没安装的话还是会报错,比如报错
findfont: Font family [‘sans-serif‘] not found
因此第一步还是先确保安装字体。要么是把字体放在matplotlib的font文件夹里(自己这么做黑体字成功了,但宋体字没有成功?),要么是安装在系统里。下面三个方法自己当初时间紧手忙脚乱的都用了,应该都是有效的。
方法一
参考链接 https://blog.csdn.net/hakukun/article/details/85763401
方法二
参考链接 https://www.bilibili.com/video/av89742180/?p=1
准备字体
simsun.ttc #宋体字:从网上下载或从Windows系统的 C:\WINDOWS\Fonts 文件夹下拷贝
times.ttf timesbd.ttf timesi.ttf timesbi.ttf #TimeNewRoma字体,同样可以从网上下载或者从Windows拷贝
放在一个文件夹下
终端安装字体
sudo chmod 777 * #先在终端打开刚才放字体的文件夹,再执行这一命令,赋予所有字体文件权限
sudo cp * /usr/share/fonts #将字体复制到这个文件夹中
cd /usr/share/fonts #打开系统字体文件夹
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv #安装字体
方法三
参考链接 https://blog.csdn.net/sunmingyang1987/article/details/102835614
这个方法需要修改matplotlib的配置文件\matplotlibrc
,不知道是不是就相当于修改默认值了,之后是不是还需要再改回来。
在其他方法有效的情况下不要轻易采用这种方式。
设置字体
这方面网上的链接很多。参考链接
- https://blog.csdn.net/zhuoqingjoking97298/article/details/108290519
- https://blog.csdn.net/feynman233/article/details/86364398
- https://blog.csdn.net/acknole/article/details/124164123
自己最后采用的设置方式如下
设置matplotlib中的rcParams
# 这种方式是设置全局字体,图例和坐标轴都可以使用中文。但好像会更改默认设置?(也可能是自己修改了配置文件导致的)
# 设置公式字体
from matplotlib import rcParams
config = {
"font.family":'serif',
"font.size": 12,
"mathtext.fontset":'stix', # 用于设置Latex字体
"font.serif": ['SimSun'], # simsun字体中文版就是宋体
}
rcParams.update(config)
其他设置方法
方法一
导入font_manager
的方法,然后设置fontproperties=
参考链接
https://blog.csdn.net/weixin_48077303/article/details/106593575
https://blog.csdn.net/asialee_bird/article/details/81027488
但这种方法好像不能在图例中也显示中文。
# 首先通过 fc-list :lang=zh 查看有哪些可用字体。
#导入包
from matplotlib import font_manager
#设置刚才系统中支持中文的字体
my_font=font_manager.FontProperties(fname="/usr/share/fonts/truetype/arphic/ukai.ttc")
#绘图加参数
plt.xticks(list(x)[::3], _xtick_labels[::3],rotation=270,fontproperties=my_font)
方法二
import matplotlib.pyplot as plt
plt.rc('font',family='Times New Roman') #这个参数和matplotlib的rcParams有关吗?
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['simsun']
plt.rcParams['axes.unicode_minus'] = False # Solve the minus sign problems # 现在好像不设置也没有问题了?
#设置汉字格式
# font = FontProperties(fname=r"/home/dddd/anaconda3/envs/rldddd/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/simsun.ttc", size=12)
# sns.set_style('darkgrid', {"font.sans-serif":['Source Han Serif CN']})
# font = {'family':'SimHei',
# 'weight':'bold',
# 'size':'12'}
# plt.rc('font', **font)
# plt.rc('axes', unicode_minus=False)
其他可参考的链接
https://blog.csdn.net/weixin_35517006/article/details/114422219
https://blog.csdn.net/weixin_43697614/article/details/124219278
数学及公式字体
由于rcParams的方法是修改全局字体(为了图例中也能显示中文),因此在设置中文字体后,但坐标标签的英文似乎有些问题,应通过Latex来重写编写。
坐标轴刻度的数字字体也不好看,需要重新设置
默认会写为斜体,通过\rm
改为正体。
ax1.set_xlabel(r'$x/{\rm m}$')
plt.xticks(fontsize = 12, fontname = 'times new roman')
恢复默认设置
参考链接 https://cloud.tencent.com/developer/ask/sof/1171759
方法1
from matplotlib import rcParams, rcParamsDefault
rcParams.update(rcParamsDefault)
方法2
# 要查找所有内置matplotlib主题,请使用
plt.style.available
# 我认为正常的是“默认”。因此,在绘制图表之前添加以下内容:
plt.style.use(['default'])