前言
在实际使用 matplotlib
这个库的时候,发现如果使用中文字体,会造成方块字的显示,因此尝试修复此类问题
出现方式
使用阿里云天池的DSW
用上述库会出现此类问题
解决方式
使用原生字体
使用以下命令去查看在matplotlib
中已经默认识别好的相关字体
1 | import matplotlib.pyplot as plt |
然后找到你认识的能使用中文的字体名称,如下图的:
之后使用plt.rcParams['font.sans-serif'] = 'AR PL UKai CN'
即可将全局文字进行替换(Ubuntu20.04
好像自带此款字体,但是 matplotlib
并不会初始使用此款字体 )
使用第三方字体
如果在上述命令中你并未发现能够有识别中文的字体文件,则可以临时注册将一个第三方字体来传入到 matplotlib
中进行使用
以 SimSun.ttf
字体为例
首先获取该字体文件,可以使用我的文件点我获取
使用
matplotlib
自带的font_manager.fontManager.addfont()
方法进行注册字体:1
2from matplotlib import font_manager
font_manager.fontManager.addfont('../数据挖掘/SimSun.ttf')确认字体文件已经被加载到字体库中:
1
2
3
4
5
6
7import matplotlib.pyplot as plt
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
# 查看字体名以及对应的字体文件名
if font.fname.split('/')[-1] == 'SimSun.ttf':
print(font.name, '-', font.fname)输入显示最前面的字体名称进行导入并输出测试文字进行测试:
1
2
3import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimSun'
plt.text(0,0,'数据挖掘',fontsize=60)
为了解决保存图像是负号’-‘显示为方块的问题,最好添加下方的代码:
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
整体实现代码如下(字体文件为:SimSun.ttf
,路径为:../数据挖掘/SimSun.ttf
):
1 | from matplotlib import font_manager |