在Python中使用matplotlib模块绘制数据图的示例


Posted in Python onMay 04, 2015

 matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

       这篇我们用matplotlib从构造最简单的bar一步一步向复杂的bar前行。什么是最简单的bar,看如下语句你就知道她有多么简单了:

import matplotlib.pyplot as plt 
 
plt.bar(left = 0,height = 1)
plt.show()

执行效果:

在Python中使用matplotlib模块绘制数据图的示例

是的,三句话就可以了,是我见过最简单的绘图语句。首先我们import了matplotlib.pyplot ,然后直接调用其bar方法,最后用show显示图像。我解释一下bar中的两个参数:

  1.     left:柱形的左边缘的位置,如果我们指定1那么当前柱形的左边缘的x值就是1.0了
  2.     height:这是柱形的高度,也就是Y轴的值了

left,height除了可以使用单独的值(此时是一个柱形),也可以使用元组来替换(此时代表多个矩形)。例如,下面的例子:

import matplotlib.pyplot as plt
 
plt.bar(left = (0,1),height = (1,0.5))
plt.show()

在Python中使用matplotlib模块绘制数据图的示例

可以看到 left = (0,1)的意思就是总共有两个矩形,第一个的左边缘为0,第二个的左边缘为1。height参数同理。
当然,可能你还觉得这两个矩形“太胖”了。此时我们可以通过指定bar的width参数来设置它们的宽度。

import matplotlib.pyplot as plt
 
plt.bar(left = (0,1),height = (1,0.5),width = 0.35)
plt.show()

在Python中使用matplotlib模块绘制数据图的示例

此时又来需求了,我需要标明x,y轴的说明。比如x轴是性别,y轴是人数。实现也很简单,看代码:

import matplotlib.pyplot as plt
 
plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.bar(left = (0,1),height = (1,0.5),width = 0.35)
plt.show()

在Python中使用matplotlib模块绘制数据图的示例

注意这里的中文一定要用u(3.0以上好像不用,我用的2.7),因为matplotlib只支持unicode。接下来,让我们在x轴上的每个bar进行说明。比如第一个是“男”,第二个是“女”。

import matplotlib.pyplot as plt
 
plt.xlabel(u'性别')
plt.ylabel(u'人数')
 
plt.xticks((0,1),(u'男',u'女'))
 
plt.bar(left = (0,1),height = (1,0.5),width = 0.35)
 
plt.show()

在Python中使用matplotlib模块绘制数据图的示例

plt.xticks的用法和我们前面说到的left,height的用法差不多。如果你有几个bar,那么就是几维的元组。第一个是文字的位置,第二个是具体的文字说明。不过这里有个问题,很显然我们指定的位置有些“偏移”,最理想的状态应该在每个矩形的中间。你可以更改(0,1)=>( (0+0.35)/2 ,(1+0.35)/2 )不过这样比较麻烦。我们可以通过直接指定bar方法里面的align="center"就可以让文字居中了。

import matplotlib.pyplot as plt
 
plt.xlabel(u'性别')
plt.ylabel(u'人数')
 
plt.xticks((0,1),(u'男',u'女'))
 
plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
 
plt.show()

加载中...
接下来,我们还可以给图标加入标题。
plt.title(u"性别比例分析")

在Python中使用matplotlib模块绘制数据图的示例

当然,还有图例也少不掉:

import matplotlib.pyplot as plt
 
plt.xlabel(u'性别')
plt.ylabel(u'人数')
 
 
plt.title(u"性别比例分析")
plt.xticks((0,1),(u'男',u'女'))
rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
 
plt.legend((rect,),(u"图例",))
 
plt.show()

在Python中使用matplotlib模块绘制数据图的示例

注意这里的legend方法,里面的参数必须是元组。即使你只有一个图例,不然显示不正确。
接下来,我们还可以在每个矩形的上面标注它具体点Y值。这里,我们需要用到一个通用的方法:

def autolabel(rects):
  for rect in rects:
    height = rect.get_height()
    plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))
其中plt.text的参数分别是:x坐标,y坐标,要显示的文字。所以,调用代码如下:
import matplotlib.pyplot as plt
 
def autolabel(rects):
  for rect in rects:
    height = rect.get_height()
    plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))
 
plt.xlabel(u'性别')
plt.ylabel(u'人数')
 
 
plt.title(u"性别比例分析")
plt.xticks((0,1),(u'男',u'女'))
rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
 
plt.legend((rect,),(u"图例",))
autolabel(rect)
 
plt.show()

在Python中使用matplotlib模块绘制数据图的示例

到这里这个图形已经基本完备了,不过可以看到你一个矩形紧靠这顶部,不是很好看。最好能够空出一段距离出来就好了。这个设置我没有找到具体的属性。不过,我还是通过一个小技巧来实现了。就是bar属性的yerr参数。一旦设置了这个参数,那么对应的矩形上面就会有一个竖着的线,我不知道他是干什么的。不过当我把这个值设置的很小的时候,上面的空白就自动空出来了。如图:

rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.000001)

在Python中使用matplotlib模块绘制数据图的示例

对于左右两边能否空出空白来暂时还没有找到(xerr参数不行)

Python 相关文章推荐
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
Python中操作文件之write()方法的使用教程
May 25 Python
Python fileinput模块使用实例
May 28 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 Python
django celery redis使用具体实践
Apr 08 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
浅析python中的del用法
Sep 02 Python
使用Python生成url短链接的方法
May 04 #Python
python实现bucket排序算法实例分析
May 04 #Python
python在指定目录下查找gif文件的方法
May 04 #Python
python创建关联数组(字典)的方法
May 04 #Python
python对html代码进行escape编码的方法
May 04 #Python
python访问类中docstring注释的实现方法
May 04 #Python
Python编写生成验证码的脚本的教程
May 04 #Python
You might like
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
jQuery学习基础知识小结
2010/11/25 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
Python自动扫雷实现方法
2015/07/25 Python
Python 加密与解密小结
2018/12/06 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
六一儿童节主持开场白
2015/05/28 职场文书
水知道答案观后感
2015/06/08 职场文书
小学远程教育工作总结
2015/08/13 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书