这个错误表明您使用的 Matplotlib 版本中 fontManager 的 API 已经发生了变化。以下是针对不同 Matplotlib 版本的完整解决方案:
通用解决方案(适用于所有版本)
1. 首先确保安装了中文字体
bash
# 安装文泉驿字体(推荐)
sudo apt install fonts-wqy-microhei fonts-wqy-zenhei -y
# 或者安装思源字体
sudo apt install fonts-noto-cjk -y
2. 清除字体缓存
bash
rm -rf ~/.cache/matplotlib
3. 使用以下兼容性代码(testziti.py)
python
import matplotlib.pyplot as plt
from matplotlib import font_manager
import os
import matplotlib
# 打印Matplotlib版本
print(f"Matplotlib版本: {matplotlib.__version__}")
# 方法1:显式指定字体路径
def setup_chinese_font():
# 常见中文字体路径
font_paths = [
'/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', # 文泉驿
'/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc', # Noto
'/usr/share/fonts/truetype/arphic/uming.ttc' # 文鼎字体
]
for path in font_paths:
if os.path.exists(path):
try:
# 新版本方法
if hasattr(font_manager, 'fontManager'):
font_manager.fontManager.addfont(path)
# 旧版本方法
font_prop = font_manager.FontProperties(fname=path)
plt.rcParams['font.family'] = font_prop.get_name()
print(f"成功设置字体: {path}")
return True
except Exception as e:
print(f"设置字体 {path} 失败: {e}")
# 方法2:备用字体列表
plt.rcParams['font.sans-serif'] = [
'WenQuanYi Micro Hei',
'Noto Sans CJK SC',
'Microsoft YaHei',
'SimHei',
'Source Han Sans CN'
]
plt.rcParams['axes.unicode_minus'] = False
return False
# 初始化字体
setup_chinese_font()
# 测试中文显示
plt.figure()
plt.title("中文测试:职工医保 自费")
plt.xlabel("时间轴")
plt.ylabel("金额(元)")
plt.plot([1, 2, 3], [4, 5, 6])
# 打印当前使用的字体
print("当前使用的字体:", plt.rcParams['font.family'])
# 保存测试图片
plt.savefig('chinese_test.png', dpi=120, bbox_inches='tight')
print("测试图片已保存为 chinese_test.png")
plt.show()
本文暂时没有评论,来添加一个吧(●'◡'●)