Matplotlib中文乱码的两种详细解决方案

 更新时间:2022年07月12日 10:07:38   作者:睿科知识云  
最近手头有公司的数据资源,正好拿来练习了matplotlib的画图,期间碰到一个坑,就是中文在图表中显示的是方框,下面这篇文章主要给大家介绍了关于Matplotlib中文乱码的两种详细解决方案,需要的朋友可以参考下

前言

Matplotlib 默认不支持中文字体,这因为 Matplotlib 只支持 ASCII 字符,但中文标注更加符合中国人的阅读习惯。因此,本节重点讲解如何在 Windows 环境下让 Matplotlib 显示中文。

Matplotlib中文乱码

当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。下面是一个含有中文乱码的折线图:

matplotlib折线图

从上图可以看出,本应该显示在红框内的中文字体没有显示出来(红框是自己标注出来的),下面给出了两种解决方案:第一种是临时解决方案,第二种是一劳永逸的解决方案。

重写配置文件

通过临时重写配置文件的方法,可以解决 Matplotlib 显示中文乱码的问题,代码如下所示:

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

将上述代码添加到您的绘图程序中,即可解决中文乱码的问题。这是一种非常灵活、便捷的解决方法。完整的程序代码如下:

#绘制折线图
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #正常显示负号
year = [2017, 2018, 2019, 2020]
people = [20, 40, 60, 70]
#生成图表
plt.plot(year, people)
plt.xlabel('年份')
plt.ylabel('人口')
plt.title('人口增长')
#设置纵坐标刻度
plt.yticks([0, 20, 40, 60, 80])
#设置填充选项:参数分别对应横坐标,纵坐标,纵坐标填充起始值,填充颜色
plt.fill_between(year, people, 20, color = 'green')
#显示图表
plt.show()

输出结果如下:

matplotlib解决中文乱码问题

不过上述解决方案适用于所有操作系统,其唯一弊端是每编写一个绘图程序就要添加一次相同的代码。

修改配置文件

下面介绍第二种方式:通过直接修改配置文件的方法,可以一劳永逸的解决 Matplotlib 的中文乱码问题。注意此过程在 Windows 环境下进行。

Matplotlib 从配置文件 matplotlibrc 中读取相关配置信息,比如字体、样式等,因此我们需要对该配置文件进行更改。首先查看 matplotlibrc 所在的目录,使用如下代码确定目录位置:

import matplotlib
matplotlib.matplotlib_fname()

输出结果:

D:\python\python37\lib\site-packages\matplotlib\mpl-data\matplotlibrc

然后修改配置文件 matplotlibrc。打开配置文件后,找到以下信息:

#font.family: sans-serif
#font.serif: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

将上述配置项前面的#去掉,并修改的配置项,如下所示:

font.family   :  Microsoft YaHei, sans-serif
font.serif: Microsoft YaHei, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

注意,由于版本问题,上述内容配置信息可能存在一些差异,请自动忽略。

最后,在以下目录中复制中文字体微软雅黑:

C:\Windows\Fonts\Microsoft YaHei UI

复制完成后,将字体粘贴至以下路径文件中:

D:\python\python37\lib\site-packages\matplotlib\mpl-data\fonts\ttf

字体粘贴后会出现一个 MSYH.ttc 的字体文件,如下所示:

编写如下代码进行测试:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-8, 8, 1024)
y1 = 0.618 * np.abs(x) - 0.8 * np.sqrt(64 - x ** 2)
y2 = 0.618 * np.abs(x) + 0.8 * np.sqrt(64 - x ** 2)
plt.plot(x, y1, color='r')
plt.plot(x, y2, color='r')
plt.title("测试",fontsize=20,color="b")
plt.show()

如果你对自己编写的程序没有强烈的“洁癖”,可以接受重复的代码,那么建议您选择第一种解决方法,因为这种方法灵活、轻便。当然您也可以选择第二种方式,一劳永逸的解决中文乱码问题。

总结

到此这篇关于Matplotlib中文乱码的两种详细解决方案的文章就介绍到这了,更多相关Matplotlib中文乱码解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解pycharm的python包opencv(cv2)无代码提示问题的解决

    详解pycharm的python包opencv(cv2)无代码提示问题的解决

    这篇文章主要介绍了详解pycharm的python包opencv(cv2)无代码提示问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python 爬取古诗文存入mysql数据库的方法

    python 爬取古诗文存入mysql数据库的方法

    这篇文章主要介绍了python 爬取古诗文存入mysql数据库的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python调用C语言的实现

    Python调用C语言的实现

    这篇文章主要介绍了Python调用C语言的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python小程序之在图片上加入数字的代码

    Python小程序之在图片上加入数字的代码

    这篇文章主要介绍了Python小程序之在图片上加入数字的代码,这个是小编今天练手的小程序,代码简单易懂,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • python中import cv2遇到的错误及安装方式

    python中import cv2遇到的错误及安装方式

    这篇文章主要介绍了python中import cv2遇到的错误及安装方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • python队列通信:rabbitMQ的使用(实例讲解)

    python队列通信:rabbitMQ的使用(实例讲解)

    下面小编就为大家分享一篇python队列通信:rabbitMQ的使用(实例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python实现判断变量是否是函数方式

    Python实现判断变量是否是函数方式

    这篇文章主要介绍了Python实现判断变量是否是函数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • django框架F&Q 聚合与分组操作示例

    django框架F&Q 聚合与分组操作示例

    这篇文章主要介绍了django框架F&Q 聚合与分组操作,结合实例形式详细分析了Django框架查询条件取对象中某列值、构建搜索条件以及聚合查询等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • numpy中的norm()函数求范数实例

    numpy中的norm()函数求范数实例

    这篇文章主要介绍了numpy中的norm()函数求范数实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • pytorch 查看cuda 版本方式

    pytorch 查看cuda 版本方式

    这篇文章主要介绍了pytorch 查看cuda 版本方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论