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对小数进行除法运算的正确方法示例
Aug 25 Python
Python简单实现enum功能的方法
Apr 25 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
Python操作MySQL模拟银行转账
Mar 12 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
python树莓派红外反射传感器
Jan 21 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
python argparser的具体使用
Nov 10 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
Python如何获取文件指定行的内容
May 27 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 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使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
PHP时间类完整代码实例
2021/02/26 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
javascript 写类方式之八
2009/07/05 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
Python 调用Java实例详解
2017/06/02 Python
Python for循环生成列表的实例
2018/06/15 Python
Python中函数参数调用方式分析
2018/08/09 Python
pandas删除指定行详解
2019/04/04 Python
Python 监测文件是否更新的方法
2019/06/10 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
Python数据正态性检验实现过程
2020/04/18 Python
教师竞聘上岗演讲稿
2014/09/03 职场文书
车间班组长竞聘书
2015/09/15 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android