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解析xml模块封装代码
Feb 07 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
Python下载网络小说实例代码
Feb 03 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
python发送邮件脚本
May 22 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
Python with用法:自动关闭文件进程
Jul 10 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
Python创建临时文件和文件夹
Aug 05 Python
python3 os进行嵌套操作的实例讲解
Nov 19 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
基于mysql的bbs设计(二)
2006/10/09 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
php中session与cookie的比较
2015/01/27 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
python获取中文字符串长度的方法
2018/11/14 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python脚本后台执行方式
2019/12/21 Python
Python ini文件常用操作方法解析
2020/04/26 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
EJB面试题
2015/07/28 面试题
小学教师的自我评价范例
2013/10/31 职场文书
贷款担保书范文
2014/05/13 职场文书
索赔员岗位职责
2015/02/15 职场文书
会计工作能力自我评价
2015/03/05 职场文书
海上钢琴师观后感
2015/06/03 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
Python find()、rfind()方法及作用
2022/12/24 Python