使用python的matplotlib的库生成图片时,中文字体可能会现实乱码(方块),因为matplotlib默认的字体不支持显示中文。

检查Matplotlib环境

  1. 查看matplotlib字体配置文件路径
import matplotlib
print(matplotlib.matplotlib_fname())

返回matplotlibrc 文件路径,如:

/usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc

可以得到 ttf 字体文件的路径:

/usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf
  1. 查看matplotlib缓存目录
import matplotlib
print(matplotlib.get_cachedir())

返回的缓存路径,如:

/home/xxx/.cache/matplotlib

TTF字体文件获取

  1. 从Windows系统获取字体
# 如微软雅黑
c:\windows\fonts\msyh.ttc
  1. 网络搜索TTF中文字体

配置Matplotlib使用中文字体

方法1: 使用font_manager模块加载字体使用

 from matplotlib.font_manager import FontProperties
 import matplotlib.pyplot as plt
 
 font = FontProperties(fname='下载的ttf文件路径', size=12)
 
 plt.plot([1, 2, 3], [4, 5, 6])
 plt.title('中文标题', fontproperties=font)
 plt.show()

适合于简单的使用plt场景

方法2: 设置matplotlib字体参数

  1. 拷贝字体文件到matplotlib的 ttf 字体文件的路径下
  2. 删除matplotlib缓存目录下的json文件
  3. 查看字体的Family Name
from matplotlib import font_manager 
for font in font_manager.fontManager.ttflist: 
  print(font.fname,font.name)

输出如下数据:

/usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/msyh.ttc Microsoft YaHei

Family NameMicrosoft YaHei
注意,没有输出新加入的字体,需要删除缓存目录下的json文件。
4. 使用示例

import matplotlib.pyplot as plt 
import matplotlib 
# 指定默认字体 
plt.rcParams['font.family'] = 'Microsoft YaHei' # 或其他支持中文的字体 
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题 
plt.plot([1, 2, 3], [4, 5, 6]) 
plt.title('中文标题') 
plt.show()