pypthon 3.6.5 绘制柱状图中文乱码的基本、根本、高效之解决方案~
最近在使用做一些数据统计、分析时需要用到画图,这里随大流使用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 绘制柱状图中文乱码的基本、根本、高效之解决方案~的更多相关文章
- url传参中文乱码
当使用url重定向传参的时候,比如: javascript:window.location.href='modifyBook.jsp?BName=<%=URLEncoder.encode(&qu ...
- web 项目:解决插入 MySQL 数据库时中文乱码问题
背景:在做 javaweb 项目的时,前台传递的中文最后插入数据库的时候总是出现乱码现象. 解决方案 A.不管是使用 Idea.eclipse,确定自己的项目所使用的字符集是 UTF-8. B ...
- python 解决cv2绘制中文乱码
因为使用cv2.putText() 只能显示英文字符,中文会出现乱码问题, 因此使用PIL在图片上绘制添加中文,可以指定字体文件. 大体思路: OpenCV图片格式转换成PIL的图片格式: 使用PIL ...
- 记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法
原文:记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法 转载请注明出处:http://www.cnblogs.com/Ray1024 一.问题描述 在MFC中使用Dir ...
- 使用matplotlib中的bar函数绘制柱状图
使用柱状图显示三日电影的票房信息 要显示的数据为2018年12月7日-9日四场电影的票房信息 四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3 2018年12月7日四场电影票房分别为:[ ...
- 解决JFreeChart中文乱码问题
以下是解决X轴,Y轴中文字符乱码的代码: JFreeChart chart = ChartFactory.createBarChart3D("管网损耗",// 图表标题 " ...
- Ubuntu环境下 matplotlib 图例中文乱码
最近做了一个最小二乘法的代码编写并用 matplotlib 绘制了一张图,但是碰到了中文乱码问题.简单搜索之后,发现有人总结出了比较好的方案,亲测可行.推荐给大家. 本文前提条件是 已经 安装好 ma ...
- jpgraph 折线图--解决中文乱码的问题(标题和图例)
在jpgraph根目录中: 如Jpg\jpgraph_ttf.inc.php 中开头添加 define('CHINESE_TTF_FONT','SIMYOU.TTF'); \Jpg\jpgraph_l ...
- 【python系列】python画报表(Chartkick、Flask)(附中文乱码解决方式)
chartkick 能够画 javascript 报表, 并且比較美观.可是网上搜了下.非常难找到 python 版本号的,于是查了些资料,摸索了下. 对 Flask 也不非常熟悉,这里就仅仅抛砖引玉 ...
随机推荐
- Nginx中配置undertow进行两个项目的动静分离配置
#user nobody; worker_processes ; pid /var/run/nginx.pid; events { worker_connections ; } http { incl ...
- 下载离线VS2017
1.下载工具 版本 文件 Visual Studio Enterprise (企业版) vs_enterprise.exe Visual Studio Professional (专业版) vs_pr ...
- jquery表单提交的新写法
$('form').submit()和$("form").submit() 这两种都可以实现form表单的提交 jquery中$('form').submit()和$(" ...
- (转载)Memcached和Redis简介
转载自: Memcached和Redis简介 博主的Redis资料列表.http://www.cnblogs.com/programlearning/category/1003158.html 前言: ...
- 【总结】瞬时高并发(秒杀/活动)Redis方案(转)
转载地址:http://bradyzhu.iteye.com/blog/2270698 1,Redis 丰富的数据结构(Data Structures) 字符串(String) Redis字符串能包含 ...
- 2016-06-18 exshop第四天
昨天本来想完成用asset-pipeline替换掉resource插件的工作,但由于进行了对spring security插件的文档解读,同时面试了4个人,每个人耗费了30分钟,并且公司下午4:30组 ...
- 1900型USB接口扫描枪设置虚拟串口模式提升扫描速度
在使用扫描枪的过程中,发现扫描二维码速度比较慢,不到100个字符,花了大概2-3秒的时间才完成显示,这个速度不能忍受啊.通过度娘,说是可以将USB键盘模式接收字符转换成虚拟串口接收,这样可以大大提高速 ...
- hbase0.94.11版本和hbase1.4.9版本的benchamark区别
1.起初使用ycsb对hbase进行benchmark,分别在100%写的情况下检测写性能:在100%读的情况下检测读的性能.实验数据如下: 2.新版本的habse写性能竟然不如老版本.!!!.于是我 ...
- fillder--信息面板显示请求耗时列
class Handlers--------->Ctrl+R,找到该方法,加上以下方法即可 { // 显示每行请求的发起时间:时分秒毫秒 public static BindUIColumn(& ...
- P1330 封锁阳光大学 DFS
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...