解决 matplotlib 绘图时中文字符显示问题

在使用 matplotlib 绘制图表时,如果标题、标签或文本中包含中文字符,可能会遇到以下错误或警告:

UserWarning: Glyph XXXX missing from current font.
Font 'default' does not have a glyph for XXXX, substituting with a dummy symbol.

这些问题的根本原因是 matplotlib 默认使用的字体不支持中文字符。本文将详细介绍如何解决这一问题,并提供完整的代码示例。

问题描述

当我们尝试在 matplotlib 中使用中文字符时,可能会出现以下情况:

  1. 图表中的中文字符显示为方框或乱码。

  2. 控制台输出大量警告信息,提示字体缺失。

例如,以下代码尝试绘制一个正态分布图,并在标题和标签中使用中文:

from scipy import stats
from matplotlib import pyplot as plt
import numpy as np

# 定义随机变量
mea = 0  # 平均值
stand = 1  # 标准差
X = np.arange(-10, 10, 0.1)

# 概率密度函数(PDF)
y = stats.norm.pdf(X, mea, stand)

# 绘图
plt.plot(X, y)

# 设置 x 轴显示区域和间隔
plt.xticks(np.arange(-10, 10, 1))

# x 轴标题
plt.xlabel('随机变量:x')

# y 轴标题
plt.ylabel('概率')

# 图标题
plt.title('正态分布:μ=%.1f,σ²=%.1f' % (mea, stand))

# 显示图形
plt.show()

运行上述代码时,可能会看到以下错误或警告:

UserWarning: Glyph 38543 (\N{CJK UNIFIED IDEOGRAPH-968F}) missing from current font.
Font 'default' does not have a glyph for XXXX, substituting with a dummy symbol.

解决方案

要解决 matplotlib 中文字符显示问题,可以通过以下方法设置支持中文的字体。

方法 1:设置支持中文的字体

matplotlib 支持自定义字体。我们可以通过设置 rcParams 来指定支持中文的字体(如 SimHei 或 Microsoft YaHei)。

修改代码

在代码开头添加以下内容:

from matplotlib import pyplot as plt
import matplotlib.font_manager as fm

# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为 SimHei
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
完整代码示例
from scipy import stats
from matplotlib import pyplot as plt
import numpy as np
import matplotlib.font_manager as fm

# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为 SimHei
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 定义随机变量
mea = 0  # 平均值
stand = 1  # 标准差
X = np.arange(-10, 10, 0.1)

# 概率密度函数(PDF)
y = stats.norm.pdf(X, mea, stand)

# 绘图
plt.plot(X, y)

# 设置 x 轴显示区域和间隔
plt.xticks(np.arange(-10, 10, 1))

# x 轴标题
plt.xlabel('随机变量:x')

# y 轴标题
plt.ylabel('概率')

# 图标题
plt.title('正态分布:μ=%.1f,σ²=%.1f' % (mea, stand))

# 显示图形
plt.show()

运行上述代码后,图表中的中文字符将正常显示。


方法 2:安装支持中文的字体

如果系统中没有 SimHei 或其他支持中文的字体,可以手动安装字体文件。

步骤
  1. 下载字体文件:从网上下载支持中文的字体文件(如 SimHei.ttf 或 Microsoft YaHei.ttf)。  

  2. 将字体文件放入 matplotlib 字体目录

    找到 matplotlib 的字体目录。可以通过以下代码查看:
import matplotlib as mpl
print(mpl.get_cachedir())

        将下载的字体文件放入 matplotlib 的字体目录中。

    3.清除字体缓存:

        删除 matplotlib 的字体缓存文件(通常位于 ~/.matplotlib 目录下),然后重新运行代码。

 

方法 3:使用系统自带的中文字体

如果你使用的是 Windows 系统,可以直接使用系统自带的中文字体(如 Microsoft YaHei)。修改代码如下:

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 设置字体为 Microsoft YaHei
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

总结:
        通过设置 matplotlib 使用支持中文的字体,可以轻松解决中文字符显示问题。推荐使用 SimHei 或 Microsoft YaHei 字体。如果问题仍未解决,请检查字体文件是否正确安装,并确保清除字体缓存。

希望本文能帮助你顺利解决 matplotlib 中文字符显示问题!如果有其他问题,欢迎在评论区留言讨论。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值