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函数学习笔记
Oct 07 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
python实现自动解数独小程序
Jan 21 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
flask 实现token机制的示例代码
Nov 07 Python
记一次Django响应超慢的解决过程
Sep 17 Python
Python循环之while无限迭代
Apr 30 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
简单谈谈python的反射机制
2016/06/28 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python破解同事的压缩包密码
2020/10/14 Python
python各种excel写入方式的速度对比
2020/11/10 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
2014年社区植树节活动方案
2014/02/28 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
工作证明格式及范本
2014/09/12 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记