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中List的sort方法指南
Sep 01 Python
简单讲解Python中的闭包
Aug 11 Python
常用python编程模板汇总
Feb 12 Python
Python使用matplotlib简单绘图示例
Feb 01 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Python中的xlrd模块使用原理解析
May 21 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Python实现一个论文下载器的过程
Jan 18 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python 接口返回的json字符串实例
2018/03/27 Python
python中返回矩阵的行列方法
2018/04/04 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
后进生转化工作制度
2014/01/17 职场文书
验房委托书
2014/08/30 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
实操Python爬取觅知网素材图片示例
2021/11/27 Python
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server