解决Matplotlib中文显示乱码的完整教程

 更新时间:2024年12月06日 08:30:44   作者:一点一木  
在使用 Matplotlib 绘制图表时,很多开发者都会遇到中文无法正常显示的问题,默认情况下,Matplotlib 并不支持中文字符,需要手动设置字体,这篇博客将教你如何解决 Matplotlib 绘图显示中文的常见问题,确保中文字符能够在图表中正确显示,需要的朋友可以参考下

问题描述

当我们在 Matplotlib 中使用中文字符时,通常会遇到如下问题:中文标题、标签或数据无法正确显示,而是出现乱码或方框。以下是一个简单的示例代码:

示例代码

import matplotlib.pyplot as plt
​
# 数据
categories = ['A类', 'B类', 'C类', 'D类']
values = [3, 7, 5, 10]
​
# 创建柱状图
plt.bar(categories, values)
​
# 设置标题和标签
plt.title('柱状图', fontsize=16)  # 中文标题
plt.xlabel('类别', fontsize=12)  # 中文X轴标签
plt.ylabel('数量', fontsize=12)  # 中文Y轴标签
​
# 显示图表
plt.show()

运行结果

在没有正确配置字体的情况下,执行上述代码后,中文字符将无法正常显示,可能出现乱码或方框,示例如下:

解决方案

  • 下载并安装中文字体

    Matplotlib 默认使用的字体库不包括中文字体。为了解决这个问题,我们需要下载一个支持中文的字体,如 SimHei(黑体)。

    可以使用 wget 下载字体文件:

!wget -O simhei.ttf "https://www.wfonts.com/download/data/2014/06/01/simhei/chinese.simhei.ttf"
# 或
!wget -O simhei.ttf "https://github.com/StellarCN/scp_zh/blob/master/fonts/SimHei.ttf"

设置 Matplotlib 使用中文字体

下载字体后,接下来要让 Matplotlib 使用该字体。通过 font_manager 来加载新的字体,并通过 rc 设置默认字体。

import matplotlib
​
# 添加下载的字体文件
matplotlib.font_manager.fontManager.addfont('chinese.simhei.ttf')
​
# 设置 Matplotlib 使用 SimHei 字体
matplotlib.rc('font', family='SimHei')

验证字体是否成功加载

你可以通过以下代码检查 Matplotlib 是否成功加载了 SimHei 字体:

import matplotlib.font_manager as fm
​
# 打印系统中所有可用的字体
for font in fm.fontManager.ttflist:
    print(font.name)
  • 在输出中,如果显示 SimHei 字体,说明字体安装成功。

  • 设置中文字体显示

    虽然上述步骤已经加载了 SimHei 字体,但为了确保 Matplotlib 正常显示中文标签,还需要设置 rcParams 来指定默认字体为 SimHei,并确保负号可以正常显示。

# 设置 Matplotlib 使用 SimHei 字体来显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

完整示例

将上述设置整合到一起,形成完整的代码如下:

import matplotlib.pyplot as plt
import matplotlib
​
# 设置字体,确保中文显示正常(非必须添加此代码)
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
​
# 数据
categories = ['A类', 'B类', 'C类', 'D类']
values = [3, 7, 5, 10]
​
# 创建柱状图
plt.bar(categories, values)
​
# 设置标题和标签
plt.title('柱状图', fontsize=16)  # 中文标题
plt.xlabel('类别', fontsize=12)  # 中文X轴标签
plt.ylabel('数量', fontsize=12)  # 中文Y轴标签
​
# 显示图表
plt.show()

最终效果

经过上述配置后,中文字符应该能够正常显示在图表中,效果如下所示:

扩展:Matplotlib 配置与调试

查看 Matplotlib 字体缓存目录

如果你遇到字体加载问题,可以查看 Matplotlib 的缓存目录,确保字体已经成功安装并被 Matplotlib 识别。

import matplotlib as mpl
print(mpl.get_cachedir())

这将返回缓存目录的路径,帮助你调试字体加载问题。

其他字体支持

除了 SimHei(黑体)之外,Matplotlib 还支持多种其他中文字体,如 Microsoft YaHei(微软雅黑),FangSong(仿宋),以及系统自带的其他字体。你可以选择合适的字体来调整图表样式。

总结

通过上述步骤,我们可以解决 Matplotlib 中中文显示问题。确保字体安装和配置正确,不仅可以提升图表的美观性,还能增强图表的可读性。希望这篇文章能够帮助你更好地在 Python 中使用 Matplotlib 绘制中文图表。

以上就是解决Matplotlib中文显示乱码的完整教程的详细内容,更多关于Matplotlib中文乱码的资料请关注脚本之家其它相关文章!

相关文章

  • 使用 Python 的 pprint库格式化和输出列表和字典的方法

    使用 Python 的 pprint库格式化和输出列表和字典的方法

    pprint是"pretty-print"的缩写,使用 Python 的标准库 pprint 模块,以干净的格式输出和显示列表和字典等对象,这篇文章主要介绍了如何使用 Python 的 pprint库格式化和输出列表和字典,需要的朋友可以参考下
    2023-05-05
  • python字符串常规操作大全

    python字符串常规操作大全

    这篇文章主要给大家介绍了关于python字符串常规操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • python 调用win32pai 操作cmd的方法

    python 调用win32pai 操作cmd的方法

    下面小编就为大家带来一篇python 调用win32pai 操作cmd的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • python爬虫解决验证码的思路及示例

    python爬虫解决验证码的思路及示例

    这篇文章主要介绍了python爬虫解决验证码的思路及示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python统计字符串中英文字母、空格、数字和其它字符的个数

    Python统计字符串中英文字母、空格、数字和其它字符的个数

    这篇文章主要给大家介绍了关于Python统计字符串中英文字母、空格、数字和其它字符的个数的相关资料,本文实例讲述了python统计字符串中指定字符出现次数的方法,需要的朋友可以参考下
    2023-06-06
  • python安装本地whl的实例步骤

    python安装本地whl的实例步骤

    在本篇文章里小编给大家整理的是关于python安装本地whl的实例步骤,有需要的朋友们可以学习下。
    2019-10-10
  • Python+Appium实现自动抢微信红包

    Python+Appium实现自动抢微信红包

    不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情。于是我用python解决我们的手速问题python实现自动抢微信红包,至于网速慢得那就只能自己花钱提升了。
    2021-05-05
  • Django单元测试中Fixtures用法详解

    Django单元测试中Fixtures用法详解

    这篇文章主要介绍了Django单元测试中Fixtures用法,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题

    python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题

    这篇文章主要介绍了python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    这篇文章主要介绍了Django项目如何配置Memcached和Redis缓存,帮助大家更好的理解和学习使用django框架,感兴趣的朋友可以了解下
    2021-04-04

最新评论