编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

matplotlib生成图表中文乱码问题(matplotlib 图例)

wxchong 2025-07-09 18:07:14 开源技术 4 ℃ 0 评论


这个错误表明您使用的 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()

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表