linux 环境下matplotlib 画图时不支持中文解决方案

在 Linux 环境下解决 matplotlib 绘图中文显示异常(乱码/方框)的问题,可通过以下步骤配置中文字体支持:


完整解决方案

1. 安装中文字体(以 SimHei 为例)

bash 复制代码
# 下载 SimHei 字体到系统字体目录
sudo wget -O /usr/share/fonts/SimHei.ttf https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf

# 更新字体缓存
sudo fc-cache -fv

2. 修改 matplotlib 配置文件

bash 复制代码
# 定位 matplotlib 配置文件路径(通常在以下位置)
python -c "import matplotlib; print(matplotlib.matplotlib_fname())"

# 编辑配置文件(例如路径为 ~/.config/matplotlib/matplotlibrc)
nano ~/.config/matplotlib/matplotlibrc

在配置文件中修改或添加以下参数:

ini 复制代码
font.family         : sans-serif
font.sans-serif     : SimHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
axes.unicode_minus  : False  # 解决负号显示异常

3. 清除 matplotlib 缓存

bash 复制代码
rm -rf ~/.cache/matplotlib

4. 代码中显式指定字体(推荐)

python 复制代码
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 测试绘图
plt.plot([1, 2, 3], [4, 5, 6])
plt.title("中文标题测试")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.show()

验证是否成功

bash 复制代码
# 检查 matplotlib 可用字体列表是否包含 SimHei
python -c "from matplotlib.font_manager import FontManager; print([f.name for f in FontManager().ttflist if 'SimHei' in f.name])"

若输出包含 SimHei,则配置成功。


常见问题排查

  1. 字体路径错误

    • 确保字体文件已正确复制到 /usr/share/fonts/~/.fonts/ 目录。
    • 执行 fc-list | grep SimHei 检查字体是否被系统识别。
  2. 缓存未更新

    • 删除 ~/.cache/matplotlib 并重启 Python 进程。
  3. 代码冲突

    • 避免在代码中重复设置 font.sans-serif 或在局部使用 fontproperties 参数覆盖全局配置。

通过以上步骤,可彻底解决 Linux 下 matplotlib 中文显示问题。若需其他字体(如宋体、楷体),方法同理,只需替换对应的字体文件即可。

相关推荐
程序员岳焱2 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
麦兜*2 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
大只鹅3 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头3 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
IT_10243 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
bobz9654 小时前
动态规划
后端
stark张宇4 小时前
VMware 虚拟机装 Linux Centos 7.9 保姆级教程(附资源包)
linux·后端
亚力山大抵5 小时前
实验六-使用PyMySQL数据存储的Flask登录系统-实验七-集成Flask-SocketIO的实时通信系统
后端·python·flask
超级小忍5 小时前
Spring Boot 中常用的工具类库及其使用示例(完整版)
spring boot·后端
CHENWENFEIc5 小时前
SpringBoot论坛系统安全测试实战报告
spring boot·后端·程序人生·spring·系统安全·安全测试