matplotlib和pandas绘图乱码问题

发布时间 2023-05-04 17:26:31作者: 灬无涯

1. 前言

在使用matplotlib绘图时,不可避免的会碰到中文乱码的问题,pandans绘图底层依旧使用的是matplotlib。而网上大部分解决办法无非就两种,这里再介绍一种导入自定义字体的方式。

2. 解决办法

字体文件可以再Windows机器上找,目录:C:\Windows\Fonts (不要随意修改字体文件文件名)

2.1 修改matplotlib包配置

  1. 拷贝字体到 matplotlib/mpl-data/fonts/ttf目录
  2. 修改 matplotlib/mpl-data/matplotlibrc文件,添加如下配置
font.family:sans-serif
font.sans-serif:simHei
axes.unicode_minus:False  # 解决负号'-'显示为方块的问题

!这种方式修改后,要重启项目哟

2.2 项目中替换

  1. 拷贝字体到 matplotlib/mpl-data/fonts/ttf目录
  2. 项目中使用rcParams属性替换font.sans-serif
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] # 设置字体
plt.rcParams["axes.unicode_minus"]=False # 该语句解决图像中的“-”负号的乱码问题

!如果你用这种方式不生效,那一定是你没拷贝字体。

2.3 导入自定义字体(推荐)

import pylab as mpl
from matplotlib import font_manager

# 不要随意修改ttf文件名,这里的./SIMHEI.TTF路径替换成你实际的路径
# 多字体可自行扩展
font_manager.fontManager.addfont('./SIMHEI.TTF')
mpl.rcParams['font.family'] = ['SIMHEI']

3. 总结

  1. 第一种方法的好处是一劳永逸,使用统一环境的项目可以这么改,但目前大部分Python项目,在开发以及线上,都会使用虚拟环境(多环境),这种情况下这种方式就有点儿鸡肋了。
  2. 第二种方式与第一种方式类似,唯一区别就是不修改 matplotlib/mpl-data/matplotlibrc文件,在使用过程中用rcParams修改配置。
  3. 第三种方式不需要去修改matplotlib包,直接在项目中导入指定字体,我个人而言更为推荐。