Matplotlib中设置中文

整体而言,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,不知道是不是就相当于修改默认值了,之后是不是还需要再改回来。
在其他方法有效的情况下不要轻易采用这种方式。

设置字体

这方面网上的链接很多。参考链接

自己最后采用的设置方式如下
设置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'])
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值