news 2026/7/13 6:37:08

Python matplotlib 画图中文显示方框怎么修复?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python matplotlib 画图中文显示方框怎么修复?

Python matplotlib 画图中文显示方框怎么修复?


问题分析


在 Python 里用 matplotlib 画图时,中文标题或坐标轴标签显示成方框(□□□),通常是因为默认字体(如 DejaVu Sans)不包含中文字形。课程作业、实验报告、数据可视化项目里都很常见。


本质就一件事:让 matplotlib 使用你系统里已有的中文字体,并顺手处理负号显示。


建议优先试方法一(改两行rcParams即可);只有系统里确实没有中文字体时,再用方法二下载开源字体。


排查步骤


1.确认系统是否有中文字体

- Windows:看C:/Windows/Fonts/是否有simhei.ttf(黑体)或msyh.ttc(微软雅黑)

- macOS:看/System/Library/Fonts//Library/Fonts/

- Linux:运行fc-list :lang=zh查看已安装的中文字体


2.确认 matplotlib 能否识别该字体



import matplotlib.font_manager as fm fonts = [f.name for f in fm.fontManager.ttflist if 'SimHei' in f.name or 'Microsoft YaHei' in f.name] print(fonts)


若输出为空,说明当前环境字体列表里没有这些字体,需要安装字体或走方法二。


3.检查代码是否同时设置了字体和负号

只写font.sans-serif而不写axes.unicode_minus = False,中文可能正常但负号仍显示异常。


示例代码


方法一:使用系统自带字体(Windows / macOS 优先试这个)


import matplotlib.pyplot as plt # Windows 常用 SimHei 或 Microsoft YaHei plt.rcParams['font.sans-serif'] = ['SimHei'] # 或 ['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # 负号正常显示 x = [1, 2, 3, 4] y = [10, 20, 15, 25] plt.plot(x, y, marker='o') plt.title('中文标题测试') plt.xlabel('横轴(单位)') plt.ylabel('纵轴(数值)') plt.show()


方法二:安装开源中文字体(Linux 或系统无中文字体时)


思源黑体免费开源。下载后注册到 matplotlib:


import matplotlib.pyplot as plt import matplotlib.font_manager as fm import urllib.request import os font_url = ( 'https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/' 'SimplifiedChinese/SourceHanSansSC-Regular.otf' ) font_path = 'SourceHanSansSC-Regular.otf' if not os.path.exists(font_path): urllib.request.urlretrieve(font_url, font_path) fm.fontManager.addfont(font_path) font_prop = fm.FontProperties(fname=font_path) plt.rcParams['font.family'] = font_prop.get_name() plt.rcParams['axes.unicode_minus'] = False plt.plot([1, 2, 3], [4, 5, 6]) plt.title('中文标题', fontproperties=font_prop) plt.xlabel('横轴', fontproperties=font_prop) plt.ylabel('纵轴', fontproperties=font_prop) plt.show()


若 GitHub 下载慢,可手动下载字体文件放到脚本同目录,再运行上面代码。


运行说明


1.环境:Python 3.6+,pip install matplotlib

2.改完字体仍显示方框:清除 matplotlib 字体缓存后重启 Python:



import matplotlib print(matplotlib.get_cachedir()) # 删除该目录下 fontlist-*.json,再重新运行绘图代码


3.验证:图表标题、坐标轴中文应正常显示,不再是方框。


常见坑


1.字体名写错

- 正确:'SimHei''Microsoft YaHei'

- 错误:'simhei'(大小写敏感)、直接写'宋体'(应使用字体注册名)


2.未清缓存

修改rcParams后仍用旧缓存。删~/.matplotlib/fontlist-*.json并重启解释器。


3.Linux 缺字体



sudo apt-get install fonts-wqy-zenhei




plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei'] plt.rcParams['axes.unicode_minus'] = False


4.Jupyter Notebook 不生效

先执行:



%matplotlib inline import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False


5.负号变方块

补上plt.rcParams['axes.unicode_minus'] = False




按上面步骤仍显示方框,可以把操作系统、matplotlib 版本、完整报错或截图发评论区,我帮你看。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 6:34:55

C++手搓矩阵运算库:从内存管理到算法优化的实战指南

1. 项目概述:为什么用C手搓矩阵运算库?如果你正在学习C,或者你的课程设计、毕业设计需要一个能体现综合能力的项目,那么亲手实现一个矩阵运算库,绝对是一个“含金量”极高的选择。这不仅仅是完成一个“矩阵计算器”&am…

作者头像 李华
网站建设 2026/7/13 6:32:41

Notepad++ HexEditor 插件 0.9.5 版本:二进制文件查看与常见编辑问题解析

Notepad HexEditor 插件 0.9.5 版本:二进制文件查看与常见编辑问题解析在开发者的日常工作中,二进制文件的分析和调试是一个常见但颇具挑战性的任务。Notepad作为一款轻量级但功能强大的文本编辑器,通过HexEditor插件扩展了其处理二进制文件的…

作者头像 李华
网站建设 2026/7/13 6:29:21

DVWA靶场搭建与Web漏洞实战:从SQL注入到XSS的攻防演练

1. 项目概述与核心价值如果你刚开始接触网络安全,尤其是Web安全方向,听到“DVWA”这个名字的频率一定不低。DVWA,全称Damn Vulnerable Web Application,直译过来就是“该死的脆弱Web应用”。我第一次接触它,还是十多年…

作者头像 李华
网站建设 2026/7/13 6:28:29

Word 2021 域代码+制表位:3步实现公式按章节自动编号与右对齐

Word域代码制表位:3步构建公式自动编号与精准对齐系统学术论文和技术报告中,公式编号的规范性直接影响内容的专业性和可读性。传统手动编号方式不仅效率低下,更会在修改文档时引发连锁性错乱。本文将揭示Word中鲜为人知的域代码与制表位组合技…

作者头像 李华
网站建设 2026/7/13 6:27:20

CPAL System Variables 实战:5类核心函数构建车载测试数据管理中心

CPAL System Variables 实战:5类核心函数构建车载测试数据管理中心在车载电子系统测试领域,数据管理一直是工程师面临的核心挑战之一。随着ECU功能复杂度呈指数级增长,传统的分散式变量管理方式已无法满足现代自动化测试的需求。System Varia…

作者头像 李华