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将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
python实现邮件自动发送
Aug 10 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
keras做CNN的训练误差loss的下降操作
Jun 22 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
Python 日期与时间转换的方法
Aug 01 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 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中取得image按钮传递的name值
2006/10/09 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
javascript基本类型详解
2014/11/28 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
小学重阳节活动总结
2015/03/24 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
青年志愿者活动感想
2015/08/07 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
Nebula Graph解决风控业务实践
2022/03/31 MySQL