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多线程扫描端口示例
Jan 16 Python
Python中几个比较常见的名词解释
Jul 04 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
详解如何设置Python环境变量?
May 13 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
试用php中oci8扩展
2015/06/18 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
python任务调度实例分析
2015/05/19 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
Python decimal模块使用方法详解
2020/06/08 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
《天安门广场》教学反思
2014/04/23 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
公司辞职信模板
2015/05/13 职场文书
走进毛泽东观后感
2015/06/04 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
护士旷工检讨书
2015/08/15 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL