Linux环境matplotlib输出图片中的中文字体显示问题解决

本文介绍如何在matplotlib中正确显示中文,通过导入中文字体文件,修改matplotlibrc配置,使图表在数据分析项目中能正常呈现中文标签,适用于Python个人项目的数据分析前端展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验楼Python 个人项目中数据分析前端展示的一个方案是前端请求时后端利用matplotlib动态生成所需要的图片返回给前端, matplotlib默认不支持中文字体显示,所以在遇到中文时无法显示。
导入中文字体文件就可以解决这个问题。首先定位matplotlib的资源文件路径,通过如下语句

import matplotlib
print(matplotlib.matplotlib_fname())

输出结果

/usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc

这个是matplotlib加载的资源文件,字体文件存放在/usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/fonts/ttf路径下,可以去这个地方下载字体(https://github.com/dolbydu/font),例如微团雅黑-Microsoft Yahei.ttf,黑体-SimHei.ttf, 楷体-STKaiti.TTF等,将下载的字体文件存放到ttf路径下
然后修改matplotlibrc文件,搜索font.family

 font.family         : sans-serif

这行的注释去掉

font.sans-serif     :STKaiti, SimHei, Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

这行的注释去掉,并在后面值的前面增加添加的中文字体文件,现在matplotlib默认的sans-serif font-family会优先选用楷体显示字体,这样就可以显示中文

最后需要删除matplotlib的生成的缓存文件

rm -rf ~/.cache/matplotlib

这样就可以进行中文字体的显示了。

<think>我们正在解决Python绘图时中文显示异常的问题。根据引用资料,常见原因是matplotlib默认配置不支持中文显示解决方案主要分为两类:修改当前程序代码或修改matplotlib配置文件。引用[1]和[5]提供了在代码中动态设置字体的方法:-引用[1]:直接设置`SimHei`字体(黑体)并解决负号显示问题。-引用[5]:根据操作系统自动选择合适的中文字体,更通用。引用[3]和[4]则提到了修改配置文件的方法,这是一种全局设置,避免每次写代码都设置字体。用户问题:生成图片时中文显示异常(乱码、方块等),需要解决方法。我们将提供两种主要方法:方法一:在代码中设置字体(临时,仅影响当前脚本)方法二:修改配置文件(永久,影响所有脚本)同时,根据引用[4]提到中文论文要求宋体,我们也要考虑如何设置宋体(SimSun)。注意:不同操作系统字体名称不同,需要区分。步骤:1.方法一(代码设置):-引入matplotlib后,设置中文字体解决负号显示。-针对不同操作系统选择字体(如Windows用SimHei/SimSun,macOS用STSong,Linux用WenQuanYi等)。2.方法二(修改配置文件):-找到配置文件路径(通过`matplotlib.matplotlib_fname()`获取)。-修改配置文件中的字体相关设置,并确保字体文件可用。另外,引用[5]给出了一个自动选择操作系统字体的函数,我们可以参考。我们将按照以下结构回答:-问题原因分析-两种解决方法(代码设置和配置文件设置)-针对宋体的设置方法(如果需要)-验证方法同时,生成相关问题。</think>### Python绘图中文显示异常解决方法 在Python中使用Matplotlib绘图时,中文显示异常(方块、乱码或空白)的根本原因是**默认字体库不包含中文字符集**。以下是两种可靠的解决方案: #### 方法一:代码动态设置(推荐) ```python import matplotlib.pyplot as plt import platform # 自动适配操作系统的中文字体 def set_chinese_font(): system = platform.system() if system == 'Windows': plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体 elif system == 'Darwin': # macOS plt.rcParams['font.sans-serif'] = ['Heiti TC'] # 华文黑体 else: # Linux plt.rcParams['font.sans-serif'] = ['WenQuanYi Micro Hei'] # 文泉驿微黑 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 # 使用示例 set_chinese_font() plt.plot([1, 2, 3], [4, 5, 6]) plt.title('中文标题测试') # 正常显示中文 plt.xlabel('X轴标签') plt.show() ``` **特点**: - 自动适配不同操作系统[^5] - 无需修改系统配置 - 负号显示兼容处理[^1] #### 方法二:修改配置文件(永久生效) 1. 获取配置文件路径: ```python import matplotlib print(matplotlib.matplotlib_fname()) # 输出配置文件路径[^4] ``` 2. 编辑配置文件(如`matplotlibrc`): ```ini # 修改以下参数 font.family : sans-serif font.sans-serif : SimHei, DejaVu Sans, Bitstream Vera Sans # 添加中文字体 axes.unicode_minus : False # 关闭unicode负号 ``` 3. 清除缓存:删除`~/.cache/matplotlib`文件夹 #### 特殊需求:显示宋体 若需显示**宋体**,需确保系统已安装相应字体: ```python plt.rcParams['font.sans-serif'] = ['SimSun'] # Windows宋体 # 或 macOS:['STSong'], Linux:['AR PL UMing CN'] ``` **验证方法**: ```python # 查看可用字体列表 from matplotlib.font_manager import fontManager [f.name for f in fontManager.ttflist if '宋' in f.name or 'Song' in f.name] ``` ### 注意事项 1. 字体名称**区分大小写**(`SimHei`≠`simhei`) 2. 服务器环境需安装中文字体包(Linux执行`sudo apt install fonts-wqy-microhei`) 3. Jupyter环境需重启内核使配置生效 4. 导出图片时需指定DPI:`plt.savefig('output.png', dpi=300)` > 通过以上方法可解决95%以上的中文显示异常问题。若仍存在异常,建议检查字体文件路径或尝试重新安装Matplotlib[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值