前言

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

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

中文乱码的解决方案

01 - 出错原因

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

  1. import matplotlib.pyplot as plt

  2. import numpy as np

  3. x = np.linspace(0.05,10,1000)

  4. y = np.cos(x)

  5. plt.plot(x,y,ls="-",lw=2,label = "plot figure")

  6. plt.legend()

  7. plt.xlabel("这是x轴")

  8. plt.ylabel("这是y轴")

  9. plt.show()

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

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

02 - 通过代码解决

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

  1. plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

  2. plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

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

我们来看完整的代码:

  1. # -*- coding: utf-8 -*-

  2. """

  3. @author: 石璞东(微信公众号:hahaCoder)

  4. @software: PyCharm

  5. @file: 01.py

  6. @time: 2020/8/16 12:24 上午

  7. """

  8. import matplotlib.pyplot as plt

  9. import numpy as np

  10. plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

  11. plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

  12. x = np.linspace(0.05,10,1000)

  13. y = np.random.randn(1000)

  14. plt.plot(x,y,label="scatter figure")

  15. plt.legend()

  16. plt.xlabel(u"这是x轴")

  17. plt.ylabel(u"这是y轴")

  18. plt.show()

我们再来看效果展示:

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

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

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

http://www.xiazaiziti.com/210356.html

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

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

  1. import matplotlib

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

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

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

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

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

  1. font.family:sans-serif

  2. font.sans-serif:SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

  3. axes.unicode_minus:False,#作用就是解决负号'-'显示为方块的问题

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

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

  1. from matplotlib.font_manager import _rebuild

  2. _rebuild() #reload一下

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

  1. # -*- coding: utf-8 -*-

  2. """

  3. @author: 石璞东(微信公众号:hahaCoder)

  4. @software: PyCharm

  5. @file: 01.py

  6. @time: 2020/8/16 12:24 上午

  7. """

  8. import matplotlib.pyplot as plt

  9. import numpy as np

  10. x = np.linspace(0.05,10,1000)

  11. y = np.random.randn(1000)

  12. plt.plot(x,y,label="scatter figure")

  13. plt.legend()

  14. plt.xlabel(u"这是x轴")

  15. plt.ylabel(u"这是y轴")

  16. plt.show()

本文最后

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

matplotlib中文乱码的两种解决方案相关推荐

  1. VS的中文乱码的四种解决方案

    VS的中文乱码问题 VS最知名的错误(被程序员吐槽最多的BUG). VS支持多种中文编码,但是使用不当时,常常导致中文乱码,而且难以解决. 中文乱码的原因: 1.中文在不同编码格式下, 存储的方式不一 ...

  2. 新方案-eclipse配置tomcat中文乱码另一种解决方案

    分两步 第一步 Tomcat设置get编码格式 1 2 <Connector connectionTimeout="20000" port="8080"  ...

  3. php源码 乱码 通达oa_php中文乱码问题的终极解决方案汇总

    前言 本文主要给大家介绍了关于php中文乱码问题的终极解决方案,分享出来供大家参考学习,在开始之前,我们先来谈谈为什么会出现中文乱码? 很多新手朋友学习PHP的时候,发现程序中的中文在输出的时候会出现 ...

  4. java解压缩文件名乱码_解决JDKZipEntry压缩文件名乱码的两种方法

    当我们在创建java的项目过程中,有时候会遇到一些棘手的问题,就比如说:在JDk zipEntry压缩中文文件名出现乱码的问题.那么对于这个问题,我们应该怎样来解决呢?今天我们就一起来学习一下它的解决 ...

  5. [转载]关于中文乱码问题的一些解决方案和经验

    关于中文乱码问题的一些解决方案和经验 1.字节和unicode java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的.因此java要对这些字节流经 ...

  6. 解决jpgraph汉字乱码的两种方法

    /************************ 解决jpgraph汉字乱码的两种方法 第一种方法:将SetFont函数第一个参数设置为FF_SIMSUN,将jpgraph_ttf.inc.php中 ...

  7. neo4j批量导入数据的两种解决方案

    neo4j批量导入数据的两种解决方案 参考文章: (1)neo4j批量导入数据的两种解决方案 (2)https://www.cnblogs.com/YoungF/p/11632488.html 备忘一 ...

  8. ubuntu系统下matplotlib中文乱码问题

    参考 [ubuntu系统下matplotlib中文乱码问题 - CSDN博客](https://blog.csdn.net/jeff_liu_sky_/article/details/54023745 ...

  9. php 嵌套 mysql_PHP中实现MySQL嵌套事务的两种解决方案,mysql嵌套_PHP教程

    PHP中实现MySQL嵌套事务的两种解决方案,mysql嵌套 一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: 1. Transactions cannot be nested. T ...

  10. java多个事件_window.onload绑定多个事件的两种解决方案

    前言 有些函数,必须在网页加载完毕 网页加载完毕时会触发一个onload事件,将函数绑定到这个事件上即可. 复制代码 代码如下: window.onload = myFuncti编程客栈on; 问题来 ...

最新文章

  1. [分享]五种提高 SQL 性能的方法
  2. 廖雪峰JS教程学习记录---字符串
  3. 怎么样做一个漂亮女人
  4. OpenCV Laplace point/edge detection拉普拉斯点/边缘检测的实例(附完整代码)
  5. vss和vs2008组合搭建源代码管理器
  6. 故障诊断:SLES12平台数据库启动失败ORA-27300
  7. java运行时异常与一般异常有何异同_JVM | 虚拟机运行时数据区域划分和使用详解...
  8. Telerik RadGridView 右键菜单如何设置?
  9. 计算机怎么调整显示英语翻译,翻译词汇:计算机显示英语词汇 口译词汇
  10. linux下u盘的使用
  11. Java来做马里奥[0]—让精灵再次舞动
  12. 数据库缓存一致性解决方案
  13. 微信公众号查题搜题平台 功能齐全
  14. 基于java springboot的图书管理系统设计和实现
  15. 4GMF论坛主席卢伟谈4G全球发展概况
  16. liferay portlet二次开发多个ajax数据传递
  17. WebRTC::FEC
  18. 服务器光盘拷贝文件夹,如何光盘path中的两个点的文件夹
  19. java通过手机号查询地区信息
  20. paa抗衰机器人的功效_PAA抗衰机器人,告诉你年轻不老的秘密

热门文章

  1. flume+kafka+storm+hdfs整合
  2. [剑指Offer] 43.左旋转字符串
  3. 入口函数ufusr()与ufsta()的区别
  4. 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)...
  5. java代码split分割数字类
  6. ORACLE HANDBOOK系列之五:PL/SQL中的集合类型(Collections in PL/SQL)
  7. 《Visual C# 从零开始学》
  8. (第一周)2018091-2 博客作业
  9. 【网络流24题】魔术球
  10. MapReduce 初学总结