Python matplotlib画图与中文设置操作实例分析


Posted in Python onApril 23, 2019

本文实例讲述了Python matplotlib画图与中文设置操作。分享给大家供大家参考,具体如下:

采用matplotlib作图时默认设置下是无法显示中文的,例如编写如下python脚本,

#-*- coding: utf-8 -*-
from pylab import *
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'钟形函数')
plt.xlabel(u'时间')
plt.ylabel(u'幅度')
plt.show()

显示出来的结果如图1所示,可见标题、标签都无法正常显示中文:

Python matplotlib画图与中文设置操作实例分析

实际上,matplotlib是支持unicode编码的,出现图1的问题主要是没有找到合适的中文字体,在matplotlib的配置文件中,可以看到字体的默认设置如下:

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

并没有中文字体,所以我们只要手动添加中文字体的名称就可以了,不过并不是添加我们熟悉的“宋体”或“黑体”这类的名称,而是要添加字体管理器识别出的字体名称,matplotlib自身实现的字体管理器在文件font_manager.py中,自动生成的可用字体信息在保存在文件fontList.cache里,可以搜索这个文件查看对应字体的名称,例如simhei.ttf对应的名称为'SimHei',simkai.ttf对应的名称为'KaiTi_GB2312'等。因此我们只要把这些名称添加到配置文件中去就可以让matplotlib显示中文,修改的方法有两种:

1. 直接修改配置文件matplotlibrc

在配置文件中找到font.sans-serif的设置,然后添加需要的中文字体名称,例如:

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

2. 动态设置(推荐方式)

在python脚本中动态设置matplotlibrc,这样不需要更改配置文件,方便灵活,例如:

mpl.rcParams['font.sans-serif'] = ['SimHei']

修改后的代码如下:

#-*- coding: utf-8 -*-
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'钟形函数')
plt.xlabel(u'时间')
plt.ylabel(u'幅度')
plt.show()

显示出来的结果如图2所示,可见标题、标签都能正常显示中文:

Python matplotlib画图与中文设置操作实例分析

但是细心些可以看出图2显示的结果并不正确,注意对比图1和图2的横坐标的坐标值,会发现图2中负轴的横坐标值不对,负号不见了!很明显,这不是程序的错误,而是由于更改了字体导致显示不出负号,在配置文件中我们可以在axes相关设置里找到如下设置:

#axes.unicode_minus : True

可见默认情况下采用的是unicode的minus,看来我们选择的字体对这点支持不够,所以只要把它设置为False就可以了,最终的代码如下:

#-*- coding: utf-8 -*-
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'钟形函数')
plt.xlabel(u'时间')
plt.ylabel(u'幅度')
plt.show()

最终显示的结果如图3所示,一切都正常了。

Python matplotlib画图与中文设置操作实例分析

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 时间处理datetime实例
Sep 06 Python
python海龟绘图实例教程
Jul 24 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
理解Python中的绝对路径和相对路径
Aug 30 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
python命令行工具Click快速掌握
Jul 04 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
Python项目跨域问题解决方案
Jun 22 Python
python中温度单位转换的实例方法
Dec 27 Python
python编写五子棋游戏
May 25 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 #Python
详解Python 函数如何重载?
Apr 23 #Python
解决Django生产环境无法加载静态文件问题的解决
Apr 23 #Python
Python 存储字符串时节省空间的方法
Apr 23 #Python
Django页面数据的缓存与使用的具体方法
Apr 23 #Python
Python切片操作去除字符串首尾的空格
Apr 22 #Python
详解python中的hashlib模块的使用
Apr 22 #Python
You might like
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
Yii学习总结之安装配置
2015/02/22 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
tensorflow多维张量计算实例
2020/02/11 Python
护士求职信
2014/07/05 职场文书
公司合并协议书范本
2014/09/30 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书