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

阅读本文大概须要 7 分钟  "




前言html


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

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


中文乱码的解决方案



01 - 出错缘由web


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


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()


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



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



02 - 经过代码解决微信


首先,第一种方法,在每次写代码以前,咱们加入以下两行代码:
app


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


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


咱们来看完整的代码:编辑器


# -*- 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()


咱们再来看效果展现:
学习



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



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


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


2. 下载好以后,咱们找到matplotlib文件夹,以下图所示:



若是找不到matplotlib文件夹的小伙伴,可经过以下代码进行查看:


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


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

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

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





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


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项目中可能遇到的中文乱码的问题,小伙伴们学会了吗?快去实践一下吧~

本文分享自微信公众号 - hahaCoder(hahaCoder)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。ui

相关文章
相关标签/搜索