0%

matplotlib中文字体的显示问题

前言

在实际使用 matplotlib这个库的时候,发现如果使用中文字体,会造成方块字的显示,因此尝试修复此类问题

出现方式

使用阿里云天池的DSW用上述库会出现此类问题

解决方式

使用原生字体

使用以下命令去查看在matplotlib中已经默认识别好的相关字体

1
2
3
4
5
6
import matplotlib.pyplot as plt
from matplotlib import font_manager

for font in font_manager.fontManager.ttflist:
# 查看字体名以及对应的字体文件名
print(font.name, '-', font.fname)

然后找到你认识的能使用中文的字体名称,如下图的:

image-20221019205305064

之后使用plt.rcParams['font.sans-serif'] = 'AR PL UKai CN'即可将全局文字进行替换(Ubuntu20.04好像自带此款字体,但是 matplotlib并不会初始使用此款字体 )

使用第三方字体

如果在上述命令中你并未发现能够有识别中文的字体文件,则可以临时注册将一个第三方字体来传入到 matplotlib中进行使用

SimSun.ttf字体为例

  1. 首先获取该字体文件,可以使用我的文件点我获取

  2. 使用 matplotlib自带的 font_manager.fontManager.addfont()方法进行注册字体:

    1
    2
    from matplotlib import font_manager
    font_manager.fontManager.addfont('../数据挖掘/SimSun.ttf')
  3. 确认字体文件已经被加载到字体库中:

    1
    2
    3
    4
    5
    6
    7
    import 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)

    image-20221019204156443

  4. 输入显示最前面的字体名称进行导入并输出测试文字进行测试:

    1
    2
    3
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = 'SimSun'
    plt.text(0,0,'数据挖掘',fontsize=60)

    image-20221019204524564

为了解决保存图像是负号’-‘显示为方块的问题,最好添加下方的代码:

plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

整体实现代码如下(字体文件为:SimSun.ttf,路径为:../数据挖掘/SimSun.ttf):

1
2
3
4
5
6
from matplotlib import font_manager
import matplotlib.pyplot as plt
font_manager.fontManager.addfont('../数据挖掘/SimSun.ttf')
plt.rcParams['font.sans-serif'] = 'SimSun'
plt.text(0,0,'数据挖掘',fontsize=60)
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

其他

Reference

-------------我也是有底线的哦如需更多,欢迎打赏-------------