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的Flask框架中使用日期和时间的教程
Apr 21 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python多继承顺序实例分析
May 26 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
Python TestCase中的断言方法介绍
May 02 Python
django-filter和普通查询的例子
Aug 12 Python
解析python的局部变量和全局变量
Aug 15 Python
将python安装信息加入注册表的示例
Nov 20 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
python opencv如何实现图片绘制
Jan 19 Python
python离线安装外部依赖包的实现
Feb 13 Python
Python生成九宫格图片的示例代码
Apr 14 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+DBM的同学录程序(3)
2006/10/09 PHP
php adodb连接不同数据库
2009/03/19 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
大学生自我鉴定范文
2013/12/28 职场文书
防沙治沙典型材料
2014/05/07 职场文书
计算机系本科生求职信
2014/05/31 职场文书
2014年店长工作总结
2014/11/17 职场文书
赢在中国观后感
2015/06/02 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS