解决Python matplotlib绘制图像无法显示中文的问题

引言

在数据可视化过程中,Python 的 Matplotlib 是广泛使用的绘图库。然而,在图表标题、坐标轴标签或图例中使用中文时,字符会显示为方块。这直接影响数据图表的可读性,尤其在学术论文、技术报告或博客中,这种可读性问题尤为突出。

问题剖析

我们使用以下代码查看 Matplotlib 所使用的全局默认 sans-serif 字体列表:

from matplotlib import rcParams, font_manager
print(rcParams['font.sans-serif'])
print(font_manager.FontProperties()) # 当前实际渲染所使用的字体

在 Windows 平台,Python 3.14,Matplotlib 3.10.7 运行结果如下:

['DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', 'sans-serif']
DejaVu Sans

可以看到,Matplotlib 默认采用 DejaVu Sans 字体进行渲染,这是一个以拉丁字母(英文及西文字母)为主的西文字体,并不包含 CJK (中文、日文、韩文) 字符。这就导致了中文字符会显示为乱码或方块。

解决方案

我们可以手动替换 sans-serif 字体列表为 CJK 字体。一般地,我们使用无衬线字体黑体即可。在 Windows 平台上可使用微软雅黑(SimHei),在 Linux 平台上可使用文泉驿正黑(WenQuanYi Zen Hei)。同时强制使用 ASCII 负号显示负号,以避免字体自身对负号的渲染问题。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei','WenQuanYi Zen Hei']
plt.rcParams['axes.unicode_minus'] = False
posted @ 2025-10-31 19:30  椰萝Yerosius  阅读(191)  评论(0)    收藏  举报