Jupyter Notebook中解决matplotlib绘图中文乱码的实用方案

在使用 Jupyter Notebook 进行数据可视化时,调用 matplotlib.pyplot 绘图模块时出现中文乱码问题。无论是图例、标题、坐标轴标签中只要含有中文字符,就会显示为一串乱码或方框,影响图表的可读性。

该问题的出现主要是由于系统默认字体中不包含中文字体,而 matplotlib 在渲染时未找到支持中文的字体资源。

解决方案

要解决该问题,需要为 matplotlib 指定一款支持中文的字体,并通过 rcParamsFontProperties 设置生效。对于中文用户常用的方式是加载如 SimHei(黑体)或 Microsoft YaHei(微软雅黑)字体。

此外,为避免负号"-"在图中被错误渲染为方块,还需要单独设置 axes.unicode_minus=False

通过 matplotlib.font_manager 模块设置字体路径并载入中文字体。rcParams 是最常见的方式,也可在全局配置文件中修改,但这里以代码方式为主,便于直接在 Notebook 环境中生效。

python 复制代码
import matplotlib.pyplot as plt
import matplotlib
from matplotlib import rcParams

# 设置中文字体为 SimHei,解决中文乱码
rcParams['font.sans-serif'] = ['SimHei']
# 解决负号 '-' 显示为方块的问题
rcParams['axes.unicode_minus'] = False

# 示例绘图
x = [1, 2, 3]
y = [10, 20, 15]
plt.plot(x, y)
plt.title("示例折线图")
plt.xlabel("横坐标")
plt.ylabel("纵坐标")
plt.grid(True)
plt.show()

如果系统中没有 SimHei,可以使用 matplotlib.font_manager.FontProperties 指定本地已有的字体文件路径:

python 复制代码
from matplotlib.font_manager import FontProperties

# 设置字体路径
font_path = "/usr/share/fonts/truetype/arphic/ukai.ttc"  # 替换为实际路径
font = FontProperties(fname=font_path)

plt.plot(x, y)
plt.title("示例折线图", fontproperties=font)
plt.xlabel("横坐标", fontproperties=font)
plt.ylabel("纵坐标", fontproperties=font)
plt.grid(True)
plt.show()

设置字体后,图表中的标题、坐标轴、图例等元素均能正确显示中文字符,不再出现乱码或方框问题,图形展示效果符合中文环境使用需求。

该问题虽小但具有普遍性,在初学数据可视化时容易影响用户对 matplotlib 的直观印象。推荐在项目初始化或教学中预设好中文字体配置。更进一步,可封装字体设置为函数或创建模板图形函数,提升复用性。此外,在多平台(如 macOS、Linux、Windows)下需要注意字体名称和路径的差异性,建议根据操作系统条件进行字体自动适配,提升代码的通用性与可移植性。

相关推荐
Xiu Yan2 天前
Python 数据分析:Pandas DataFrame 零基础入门教程
python·jupyter·pycharm·numpy·pandas
2501_915909062 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_915918412 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Xiu Yan3 天前
Python 数据分析:Pandas Series 零基础入门教程
python·jupyter·pycharm·numpy·pandas
滕州市燕猫虎计算机科技工作室个体工商户3 天前
IDEA:Command line is too long
java·ide·intellij-idea
AI编码进化论5 天前
云IDE介绍:环境模板化、Agent上云,云IDE该怎么选
开发语言·ide·人工智能·团队开发·ai编程
troy1285 天前
Python 基础语法(九):Django/Flask/FastAPI 三大 Web 框架详细对比解析
python·jupyter·django·flask·github·fastapi
jzshmyt5 天前
我用 Python 从零“生成“了一个宇宙,然后让它观察自己(v14)
人工智能·pytorch·python·numpy·matplotlib·空间计算·scipy
我要见SA姐15 天前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
ide·vscode·python·自动化·编辑器
2501_915918416 天前
使用 VS Code 写 Swift 做 iOS 开发,插件能实现哪些功能,还有哪些短板
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程