matplotlib中文乱码的两种解决方案

简介: 最近在搞数据可视化的一些案例,特地来把学习过程中遇到的一些小问题记录一下。今天遇到一个问题就是:当我给坐标轴添加一些中文内容以便客户查看时,出现了乱码,接下来我就通过两种方法对乱码的问题做一下解释。

前言


最近在搞数据可视化的一些案例,特地来把学习过程中遇到的一些小问题记录一下。


今天遇到一个问题就是:当我给坐标轴添加一些中文内容以便客户查看时,出现了乱码,接下来我就通过两种方法对乱码的问题做一下解释。


中文乱码的解决方案



01 - 出错原因


我们先来看一段简单的演示代码:


import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.cos(x)
plt.plot(x,y,ls="-",lw=2,label = "plot figure")
plt.legend()
plt.xlabel("这是x轴")
plt.ylabel("这是y轴")
plt.show()


代码很简单,这里不再赘述,我们直接看效果:


微信图片_20220611013150.png


我们发现,除了大大的报红信息之外,对于坐标轴的中文解释内容也出现了乱码现象。ok,找出了问题,接下来我们就来看看解决办法。



02 - 通过代码解决


首先,第一种方法,在每次写代码之前,我们加入如下两行代码:


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


加入这两行代码之后我们发现,所得结果仍然还有乱码现象,这里说一下,我在很多书中的演示代码也看到,作者只是添加了这两行代码,这并没有结束,我们在输入中文字符的时候,还应该在中文字符前加上 u ,即正确格式为:u'内容'


我们来看完整的代码:


# -*- coding: utf-8 -*-
"""
@author: 石璞东(微信公众号:hahaCoder)
@software: PyCharm
@file: 01.py
@time: 2020/8/16 12:24 上午
"""
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False#用来正常显示负号
x = np.linspace(0.05,10,1000)
y = np.random.randn(1000)
plt.plot(x,y,label="scatter figure")
plt.legend()
plt.xlabel(u"这是x轴")
plt.ylabel(u"这是y轴")
plt.show()


我们再来看效果展示:


微信图片_20220611013200.png


哈哈哈,乱码问题被解决咯,不过细心的小伙伴会发现,每次写代码,都要把这两行代码加进去,而且还要在中文内容前加 u ,这可太麻烦了,所以我给小伙伴们介绍了第二种一劳永逸的方法,快来看看吧~



03 - 修改配置文件,一劳永逸的方法


1.首先,我们下载SimHei字体(即SimHei.tff包),小伙伴们可在官网下载,也可在我推荐的如下地址去下载:http://www.xiazaiziti.com/210356.html


2.下载好之后,我们找到matplotlib文件夹,如下图所示:


微信图片_20220611013207.jpg


如果找不到matplotlib文件夹的小伙伴,可通过如下代码进行查看:


import matplotlib
print(matplotlib.get_data_path())  # 数据路径


我们重点关注matplotlib中的ttf文件夹matplotlibrc文档

第一步,我们将下载好的SimHei.ttf文件拷贝到ttf文件夹


第二步,我们打开matplotlibrc文档,按照如下提示进行修改:



微信图片_20220611013218.png


微信图片_20220611013224.png


微信图片_20220611013228.png


总结一下,共需要修改三条配置命令:


font.family:sans-serif
font.sans-serif:SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
axes.unicode_minus:False,#作用就是解决负号'-'显示为方块的问题


提醒小伙伴一点,不要忘记去掉上述所修改三条配置命令前的 # 符号。


3.修改完成配置文件之后,距离成功就差一步咯,我们现在只需要将我们刚刚拷贝的字体和设置的命令重新加载一下即可,我们可以通过如下命令进行设置:


from matplotlib.font_manager import _rebuild
_rebuild() #reload一下


设置完成之后,我们无需引入其他代码,也无需在中文内容前加 u ,就可以正常显示中文内容啦,完整代码如下:


# -*- coding: utf-8 -*-
"""
@author: 石璞东(微信公众号:hahaCoder)
@software: PyCharm
@file: 01.py
@time: 2020/8/16 12:24 上午
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.random.randn(1000)
plt.plot(x,y,label="scatter figure")
plt.legend()
plt.xlabel(u"这是x轴")
plt.ylabel(u"这是y轴")
plt.show()

 

本文最后


在上述内容中,我介绍了两种解决matplotlib项目中可能遇到的中文乱码的问题,小伙伴们学会了吗?快去实践一下吧~


相关文章
|
10月前
|
Python
【python3.6】pyinstaller报错AssertionError: Failed to determine matplotlib‘s data directory!【解决方案】
【python3.6】pyinstaller报错AssertionError: Failed to determine matplotlib‘s data directory!【解决方案】
173 0
|
Python
matplotlib绘图中文乱码问题
matplotlib绘图中文乱码问题
1246 0
|
测试技术 Python
软件测试|matplotlib中文不显示的解决方案
软件测试|matplotlib中文不显示的解决方案
130 0
软件测试|matplotlib中文不显示的解决方案
|
Python
避免Matplotlib绘图中文乱码
本文介绍避免Matplotlib绘图出现中文乱码问题的解决方案。
168 0
避免Matplotlib绘图中文乱码
|
SQL 缓存 数据挖掘
永久解决matplotlib中文乱码
永久解决matplotlib中文乱码
256 0
永久解决matplotlib中文乱码
to_csv()中文乱码,Matplotlib绘制图表中文乱码解决方案
to_csv()文件写入文字乱码; 利用 Pandas 把数据写入csv 文件出现乱码,解决方案:
|
测试技术 Linux iOS开发
Python编程:解决matplotlib绘图中文乱码问题
Python编程:解决matplotlib绘图中文乱码问题
155 0
Python编程:解决matplotlib绘图中文乱码问题