上一篇
Python绘图中文显示解决方案 - 解决matplotlib中文乱码问题
- Python
- 2025-08-10
- 16
Python绘图中文显示解决方案
彻底解决Matplotlib中文乱码问题
为什么Matplotlib无法显示中文?
Matplotlib默认使用英文字体,不包含中文字符集,导致中文显示为方框或乱码。主要原因包括:
- 默认字体不支持中文
- 系统缺少合适的中文字体
- 未正确配置字体参数
解决方案一:使用系统自带字体
这是最简单的方法,通过指定系统中已有的中文字体来解决中文显示问题。
import matplotlib.pyplot as plt
import matplotlib as mpl
# 设置中文字体 - 根据系统选择
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei', 'KaiTi', 'SimSun'] # 设置支持中文的字体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 16]
# 创建图表
plt.figure(figsize=(8, 5))
plt.plot(x, y, marker='o', color='#3498db', linewidth=2)
# 添加中文标题和标签
plt.title('销售数据可视化', fontsize=16)
plt.xlabel('时间(月份)', fontsize=12)
plt.ylabel('销售额(万元)', fontsize=12)
# 显示网格
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
注意事项:
- 不同操作系统字体名称不同:Windows可用"Microsoft YaHei"、"SimHei"、"KaiTi";MacOS可用"Arial Unicode MS"、"PingFang SC"
- 务必设置
plt.rcParams['axes.unicode_minus'] = False
解决负号显示问题 - 此方法适用于系统已安装相应中文字体的情况
解决方案二:使用自定义字体文件
当系统没有合适中文字体时,可加载自定义字体文件(如.ttf格式)。
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from pathlib import Path
# 加载自定义字体文件
font_path = 'SourceHanSansCN-Regular.ttf' # 替换为你的字体文件路径
font_prop = fm.FontProperties(fname=font_path)
# 创建数据
categories = ['电子产品', '服装', '食品', '书籍', '家居']
sales = [120, 85, 95, 70, 110]
# 创建柱状图
plt.figure(figsize=(10, 6))
bars = plt.bar(categories, sales, color=['#3498db', '#2ecc71', '#e74c3c', '#f39c12', '#9b59b6'])
# 添加中文标题和标签
plt.title('产品类别销售额对比', fontproperties=font_prop, fontsize=16)
plt.xlabel('产品类别', fontproperties=font_prop, fontsize=12)
plt.ylabel('销售额(万元)', fontproperties=font_prop, fontsize=12)
# 在柱子上方显示数值
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{height}万',
ha='center', va='bottom',
fontproperties=font_prop)
plt.xticks(fontproperties=font_prop) # 设置x轴刻度字体
plt.show()
优点:
- 不依赖系统字体
- 可精确控制使用的字体
- 方便项目迁移
注意事项:
- 确保字体文件路径正确
- 字体文件需包含中文字符集
- 需为每个文本元素单独设置fontproperties
解决方案三:全局配置字体
修改Matplotlib配置文件实现全局中文支持,一劳永逸。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# 查找Matplotlib配置文件位置
print(mpl.matplotlib_fname())
# 手动修改配置文件步骤:
# 1. 找到配置文件(通常位于matplotlib/mpl-data/matplotlibrc)
# 2. 修改以下两行:
# font.family: sans-serif
# font.sans-serif: Microsoft YaHei, SimHei, DejaVu Sans, ... # 添加中文字体
# 3. 取消注释并设置:
# axes.unicode_minus: False
# 重新加载配置
mpl.rcParams.update(mpl.rcParamsDefault)
# 创建示例图表
plt.figure(figsize=(8, 6))
# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制双线图
plt.plot(x, y1, label='正弦曲线', color='#e74c3c', linewidth=2)
plt.plot(x, y2, label='余弦曲线', color='#3498db', linewidth=2)
# 添加中文标题和标签
plt.title('三角函数曲线图', fontsize=16)
plt.xlabel('X轴', fontsize=12)
plt.ylabel('Y轴', fontsize=12)
plt.legend(fontsize=10)
# 添加网格和样式
plt.grid(True, linestyle='--', alpha=0.7)
plt.axhline(y=0, color='k', linewidth=0.8)
plt.axvline(x=0, color='k', linewidth=0.8)
plt.show()
推荐使用场景:
- 长期使用Matplotlib进行中文可视化
- 团队协作需要统一字体设置
- 创建大量中文图表项目
解决方案对比
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
系统自带字体 | 简单快捷,无需额外文件 | 依赖系统字体,跨平台兼容性差 | 快速原型开发,个人项目 |
自定义字体文件 | 精确控制,不依赖系统 | 需要管理字体文件,代码稍复杂 | 项目部署,跨平台应用 |
全局配置 | 一劳永逸,无需每次设置 | 配置复杂,影响所有项目 | 长期使用,团队协作 |
最佳实践建议
对于大多数用户,推荐方法一(系统自带字体)作为起点,简单有效。
对于正式项目或需要部署的应用,建议使用方法二(自定义字体文件)确保跨平台兼容性。
常见问题解答
Q 设置了中文字体但仍有部分文字显示为方框?
这可能是因为:
- 使用的字体不包含所有需要的汉字(尤其是生僻字)
- 特殊位置如legend、annotate等未正确设置字体
- 缓存问题 - 尝试清除Matplotlib缓存(
plt.rcParams.update(plt.rcParamsDefault)
)
Q 如何在Jupyter Notebook中永久解决中文显示问题?
推荐方法:
- 在Notebook开头添加字体设置代码:
- 或创建ipython配置文件:
~/.ipython/profile_default/ipython_config.py
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 或其他中文字体
plt.rcParams['axes.unicode_minus'] = False
Q 哪些中文字体适合数据可视化?
推荐字体:
- 思源黑体:开源、现代、支持多种字重
- 微软雅黑:Windows系统自带,清晰易读
- 方正兰亭黑:专业设计,适合屏幕显示
- 苹方:MacOS系统自带,优秀显示效果
避免使用衬线字体(如宋体)用于图表,无衬线字体在屏幕上显示更清晰。
本文由MiWen于2025-08-10发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257769.html
发表评论