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()
代码很简单,这里不再赘述,我们直接看效果:
我们发现,除了大大的报红信息之外,对于坐标轴的中文解释内容也出现了乱码现象。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()
我们再来看效果展示:
哈哈哈,乱码问题被解决咯,不过细心的小伙伴会发现,每次写代码,都要把这两行代码加进去,而且还要在中文内容前加 u ,这可太麻烦了,所以我给小伙伴们介绍了第二种一劳永逸的方法,快来看看吧~
03 - 修改配置文件,一劳永逸的方法
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项目中可能遇到的中文乱码的问题,小伙伴们学会了吗?快去实践一下吧~
- Android i2c-tools移植
- 高通GPIO驱动(DTS方式)
- Dos烧录脚本
- 使用ServiceStack构建Web服务
- 《Redis设计与实现》读书笔记(二十三) ——Redis服务器初始化
- 警惕:Oracle中删除的分区不会进入回收站(Recyclebin)
- 《Redis设计与实现》读书笔记(二十五) ——Redis主从复制具体过程
- 基于input子系统的sensor驱动调试(一)
- 《Redis设计与实现》读书笔记(二十六) ——Redis哨兵(sentinel)启动与建立监听机制
- 《Redis设计与实现》读书笔记(二十七) ——Redis哨兵(sentinel)主服务器下线判断与故障转移
- 基于input子系统的sensor驱动调试(二)
- 编程语言中的闭包
- 《Redis设计与实现》读书笔记(二十八) ——Redis集群节点结构与槽分配
- Linux RCU 机制详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HDU 5806
- B - They Are Everywhere CodeForces - 701C
- 尺取练习 -A - A - Stages (水题压压惊)
- 填坑-回溯-预习 之 二分-尺取大总结
- 深入浅出理解动态规划(一) | 交叠子问题
- 深入浅出理解动态规划(二) | 最优子结构
- 用x种方式求第n项斐波那契数,99%的人只会第一种
- 面试官:手撕十大排序算法,你会几种?
- 如何在Integer类型的ArrayList中同时添加String、Character、Boolean等类型的数据?
- Java开发岗面试题--基础篇(一)
- leetcode链表之找出倒数第k个节点
- MAC下安装nginx的正确姿势 实践笔记
- 关于 ThreadLocal 你需要知道的几点
- 关于Guava ForwardingMap
- http post Request header is too large 开发环境和线上版本解决方案