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之一个免费的实验室
Sep 14 Python
改进Django中的表单的简单方法
Jul 17 Python
Django接受前端数据的几种方法总结
Nov 04 Python
Python实现的密码强度检测器示例
Aug 23 Python
python绘制简单折线图代码示例
Dec 19 Python
深入浅析python 中的匿名函数
May 21 Python
Sanic框架流式传输操作示例
Jul 18 Python
简单了解django orm中介模型
Jul 30 Python
python实现图片上添加图片
Nov 26 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 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实现Ftp用户的在线管理
2012/02/16 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
js实现进度条的方法
2015/02/13 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
angular2实现统一的http请求头方法
2018/08/13 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
python获取代码运行时间的实例代码
2018/06/11 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
七年级地理教学反思
2014/01/26 职场文书
个人函授自我鉴定
2014/03/25 职场文书
人事经理岗位职责
2014/04/28 职场文书
大学班级文化建设方案
2014/05/06 职场文书
舞蹈专业求职信
2014/06/13 职场文书
中学语文教学反思
2016/02/16 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
nginx内存池源码解析
2021/11/20 Servers
MySQL数据库表约束讲解
2022/06/21 MySQL