最近在使用做一些数据统计、分析时需要用到画图,这里随大流使用matlab强大的python平台绘图组件pyplot来实现。

然而在使用过程中遇到中文显示框框的问题,对于有强迫症的我简直不能忍啊~ 下面提供几个解决这个问题的方法

本文环境:

  • Win7 64位
  • Python3.6.5(通过Anaconda安装)

1、基本方法:

通过设置中文字体,简单有效

通过在绘制中文的时候加字体属性:

YaHei = fmgr.FontProperties(fname='C:\\Windows\\Fonts\\msyh.ttf')

#添加图形属性
plt.xlabel('行描述中文', fontproperties=YaHei)

效果如下图:



完整代码:

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.font_manager as fmgr
import numpy as np YaHei = fmgr.FontProperties(fname='C:\\Windows\\Fonts\\msyh.ttf') #添加图形属性
plt.xlabel('行描述中文', fontproperties=YaHei)
plt.ylabel('列描述中文')
plt.title('标题哪去了', fontproperties=YaHei) #y轴的数据
y = [9, 14, 11, 13, 17, 5, 7, 11, 8, 19]
first_bar = plt.bar(range(len(y)), y, color='#2E8B57') #初版柱形图,x轴0-9,y轴是列表y的数据,颜色是蓝色 #x轴的数据
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #x轴标签
name_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9'] #绘制x轴的标签
plt.xticks(index, name_list) #柱形图顶端数值显示
for data in first_bar:
y = data.get_height()
x = data.get_x()
plt.text(x+0.15, y , str(y), va='bottom') #图片的显示及存储
plt.show() #这个是图片显示
plt.close() #关闭matplotlib

但是如果我有很多文本的话,岂不是每一个文本绘制时都要配置这个参数?

2、当前程序全局配置方法:

通过在程序中配置字体环境

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

效果如下:



完整代码如下:

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.font_manager as fmgr
import numpy as np plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #添加图形属性
plt.xlabel('行描述中文')
plt.ylabel('列描述中文')
plt.title('标题哪去了') #y轴的数据
y = [9, 14, 11, 13, 17, 5, 7, 11, 8, 19]
first_bar = plt.bar(range(len(y)), y, color='#2E8B57') #初版柱形图,x轴0-9,y轴是列表y的数据,颜色是蓝色 #x轴的数据
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #x轴标签
name_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9'] #绘制x轴的标签
plt.xticks(index, name_list) #柱形图顶端数值显示
for data in first_bar:
y = data.get_height()
x = data.get_x()
plt.text(x+0.15, y , str(y), va='bottom') #图片的显示及存储
plt.show() #这个是图片显示
plt.close() #关闭matplotlib

3、安装中文原生支持插件方法:

pyplotz官网

  • 安装方法1:通过pip install pyplotz安装
  • 安装方法2:如果你的网络不好无法安装或者各种超时,可以从这里点我直接下载,比如下载到D盘根目录,然后CMD命令行下cd到D盘根目录,使用pip install ./pyplotz-0.24.tar.gz 来安装

安装好之后,pyplotz可以跟pyplot混合一起用,或者只在绘制中文的时候用,效果图跟上面一样就不重复了,使用的完整代码如下:

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.font_manager as fmgr
import numpy as np
from pyplotz.pyplotz import PyplotZ pltz = PyplotZ() # 这里创建一个支持中文的实例
pltz.enable_chinese() # 开启中文支持,下面就可以用pltz替代之前的plt绘制中文了 pltz.xlabel('行描述中文')
pltz.ylabel('列描述中文')
pltz.title('标题哪去了')
#y轴的数据
y = [9, 14, 11, 13, 17, 5, 7, 11, 8, 19]
first_bar = plt.bar(range(len(y)), y, color='#2E8B57') #x轴的数据
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #x轴标签
name_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9'] #绘制x轴的标签
plt.xticks(index, name_list) #柱形图顶端数值显示
for data in first_bar:
y = data.get_height()
x = data.get_x()
plt.text(x+0.15, y , str(y), va='bottom')
#图片的显示及存储
plt.show() #这个是图片显示
plt.close() #关闭matplotlib

当然,在使用这个原生支持中文插件的同时,你还是可以自定义个性化的字体,比如设置图中的标题跟底部行描述分别为楷体、微软雅黑,可以如下设置:

......
YaHei = fmgr.FontProperties(fname='C:\\Windows\\Fonts\\msyh.ttf')
SimKai = fmgr.FontProperties(fname='C:\\Windows\\Fonts\\simkai.ttf') pltz = PyplotZ()
pltz.enable_chinese()
pltz.xlabel('行描述中文', fontproperties=YaHei)
pltz.ylabel('列描述中文')
plt.title('标题哪去了',fontproperties=SimKai)
......

结果如下图:

pypthon 3.6.5 绘制柱状图中文乱码的基本、根本、高效之解决方案~的更多相关文章

  1. url传参中文乱码

    当使用url重定向传参的时候,比如: javascript:window.location.href='modifyBook.jsp?BName=<%=URLEncoder.encode(&qu ...

  2. web 项目:解决插入 MySQL 数据库时中文乱码问题

    背景:在做 javaweb 项目的时,前台传递的中文最后插入数据库的时候总是出现乱码现象. 解决方案 ​ A.不管是使用 Idea.eclipse,确定自己的项目所使用的字符集是 UTF-8. ​ B ...

  3. python 解决cv2绘制中文乱码

    因为使用cv2.putText() 只能显示英文字符,中文会出现乱码问题, 因此使用PIL在图片上绘制添加中文,可以指定字体文件. 大体思路: OpenCV图片格式转换成PIL的图片格式: 使用PIL ...

  4. 记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法

    原文:记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法 转载请注明出处:http://www.cnblogs.com/Ray1024 一.问题描述 在MFC中使用Dir ...

  5. 使用matplotlib中的bar函数绘制柱状图

    使用柱状图显示三日电影的票房信息 要显示的数据为2018年12月7日-9日四场电影的票房信息 四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3 2018年12月7日四场电影票房分别为:[ ...

  6. 解决JFreeChart中文乱码问题

    以下是解决X轴,Y轴中文字符乱码的代码: JFreeChart chart = ChartFactory.createBarChart3D("管网损耗",// 图表标题 " ...

  7. Ubuntu环境下 matplotlib 图例中文乱码

    最近做了一个最小二乘法的代码编写并用 matplotlib 绘制了一张图,但是碰到了中文乱码问题.简单搜索之后,发现有人总结出了比较好的方案,亲测可行.推荐给大家. 本文前提条件是 已经 安装好 ma ...

  8. jpgraph 折线图--解决中文乱码的问题(标题和图例)

    在jpgraph根目录中: 如Jpg\jpgraph_ttf.inc.php 中开头添加 define('CHINESE_TTF_FONT','SIMYOU.TTF'); \Jpg\jpgraph_l ...

  9. 【python系列】python画报表(Chartkick、Flask)(附中文乱码解决方式)

    chartkick 能够画 javascript 报表, 并且比較美观.可是网上搜了下.非常难找到 python 版本号的,于是查了些资料,摸索了下. 对 Flask 也不非常熟悉,这里就仅仅抛砖引玉 ...

随机推荐

  1. 目标检测算法之Faster R-CNN算法详解

    Fast R-CNN存在的问题:选择性搜索,非常耗时. 解决:加入一个提取边缘的神经网络,将候选框的选取交给神经网络. 在Fast R-CNN中引入Region Proposal Network(RP ...

  2. linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案

    https://blog.csdn.net/electrocrazy/article/details/79377214

  3. C++ 复制构造函数 与 赋值运算符

    在C++中,将一个对象赋给另外一个对象,编译器将提供赋值运算符的定义. 有两种情况,下面假设catman是Monster的一个实例 第一种:初始化 Monster golblen= catman; 第 ...

  4. Maven+SpringMVC+SpringFox+Swagger整合示例

    查考链接:https://my.oschina.net/wangmengjun/blog/907679 coding地址:https://git.coding.net/conding_hjy/Spri ...

  5. python排序算法之冒泡,选择,插入

    1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 ...

  6. [转]git 删除远程仓库文件

    来源:https://www.jianshu.com/p/de75a9e3d1e1 git删除远程文件夹或文件的方法 项目开发初期由于.gitignore 文件配置不正确很有可能导致某些不需要的目录上 ...

  7. linux shell基本知识

    shell script的一些注意事项: .#这个符号是注释本行,通常用来做批注用,#!除外,是用来标注用哪种shell执行本脚本, .执行顺序为从上到下,从做到右 .忽略空行,tab空格 .脚本换行 ...

  8. APM 原理与框架选型

    发些存稿:) 0. APM简介 随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂: 不同的服务可能由不同的团队开发.甚至可能使用不同的编程语言来实现 服务有可能 ...

  9. 精简版自定义 jquery

    function $(id) { var el = 'string' == typeof id ? document.getElementById(id) : id; el.on = function ...

  10. python 进阶读书笔记1 -- 理解python一切皆对象

    理解python一切皆对象: 1.所有的类都是由type创建的 2.所有的类的基类都是object 3.type是类,也是实例,type的基类是object,type对象是由type创建的 4.obj ...