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 获取进程pid号的方法
Mar 10 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
Python 中 Meta Classes详解
Feb 13 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
python自动12306抢票软件实现代码
Feb 24 Python
python查看列的唯一值方法
Jul 17 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python中使用while循环的实例
Aug 05 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
Python实现CAN报文转换工具教程
May 05 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
PR值查询 | PageRank 查询
2006/12/20 PHP
php实现短信发送代码
2015/07/05 PHP
一些mootools的学习资源
2010/02/07 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
axios 封装上传文件的请求方法
2018/09/26 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
学校司机岗位职责
2013/11/14 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
行政内勤岗位职责
2014/04/07 职场文书
推广普通话演讲稿
2014/05/23 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
MySQL创建表操作命令分享
2022/03/25 MySQL