今天是数据处理专题的第10篇文章,我们继续来聊聊matplot这个工具库。

在上周的文章当中我们介绍了matplot的基本用法,以及展示了一些简单的例子,让大家直观地了解这个工具包。我们可以简单地将它理解成专门用来作图的工具,但是它作图的功能又非常强大,以至于并不能当成一个简单的内容来对待。道理也很简单,老板让你去做一份数据出来,结果你画出来的图啥也没有,也不知道什么颜色代表什么内容,也没有标题,难以阅读,显然这是不行的。

所以我们还需要深入学习它的一些高级用法, 让我们做出来的图更加的直观,展示更多的信息,也更加美观。

Figure设置图像大小

首先我们来介绍一个很重要的概念,叫做Figure。Figure是matplotlib的核心对象,可以理解成所有我们画出来的图像的数据都存在figure对象当中。其实这个概念非常直观,因为在英文当中figure本身就有图像的意思,当然它还可以指一个人的身材,扯远了……

在计算机领域当中类似的概念有不少,如果我们不知道它的英文意思,可能会觉得这些概念都很费解,这边一个概念,那边一个概念,有时候如果能够了解一下它对应的英文原意,也许会发现些惊喜,让你理解更加顺畅。

figure最简单的用法就是设置matplotlib绘制出来图片的大小,我们用sigmoid函数图像举例,我们正常画出来的图像是这样的:

由于图片会有缩放,所以大家可能很难直接从文章的图片上看出它的大小,但是至少我们是可以看出来这是一个长方形的图像。如果我们想要将它绘制成正方形呢?或者是我们想要控制它的大小,让它画得长一些或者是宽一些或者是单纯地大一些呢?

这时候我们就需要用到figure了,我们可以在figure当中通过figsize这个参数来设置它的大小。比如我们用下面这些代码绘制出来的图像就变了:

即使看不出来大小,但是我们也可以看得出来图片变成了正方形。原因是因为我们传入的size是一个(5, 5)的tuple,这里的5的单位是英寸。也就是说我们通过参数设置,可以使得绘制出来的图像按照我们想要的大小展示,并且可以保证不论在什么设备上看到的结果都是一样的。

subplot与子图

有的时候我们希望把一系列图表合并在一起,拼成一张大图,这样的话会更加方便我们观看,可以一次性获取更多的信息。对于这个问题有好几个解决方案,我们一个一个来看。

plt.subplot

首先,我们可以使用plt.subplot方法,subplot顾名思义就是子图的意思。这时候我们传入三个数,前面两个参数表示我们最后想要得到的大图的情况。比如说我们希望最后的大图是由两行一列的小图组成的,那么我们就传入2,1。第三个参数表示当前绘制的是第几个小图。

这里隐藏的重点是我们绘制多个子图的时候是一个一个绘制的,小图的摆放形式非常类似于二维数组。我们来看一个例子:

plt.subplot(2, 1, 1)
plt.plot(range(10))
plt.subplot(2, 1, 2)
plt.plot(x, y)
plt.show()

可以看到我们一共调用了两次plot方法,每一次调用之前都先调用了subplot申明了当前plot的是第几个子图。这样我们得到的结果就是由两行一列不同图像组成的大图。

关于subplot有一点需要注意,如果我们在调用subplot之前也调用了plot,那么我们plot的内容会被清除。比如说我们在subplot之前再多调用一次plot,得到的结果是一样的。

plt.plot(10)
plt.subplot(2, 1, 1)
plt.plot(range(10))
plt.subplot(2, 1, 2)
plt.plot(x, y)

因为我们调用subplot的时候清除了当前figure当中已经有的内容,所以还是只能看到上面的结果。

figure.add_subplot

上面一种方法的好处是用起来非常方便,我们只需要不停地调用subplot就可以了,但是坏处是会清除之前残留的图像,还有就是不是非常直观。虽然所有操作都通过plt进行非常方便,但是对于初学者而言要记住这么多api并不是一件容易的事情。

所以这里我们还有另外一种方法,这一种方法要直观很多,也更加符合我们日常编程的习惯。这个方法就是通过figure调用add_subplot。也就是我们先创建figure对象之后,再往figure当中添加子图。我们同样来看个例子:

fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

ax1.plot(range(10))
ax2.plot(x, y)
plt.show()

在这段代码当中我们先创建了一个figure对象,然后再通过这个figure对象创建了两个subplot对象。最后我们对于每一个subplot对象单独绘制,这样整个过程更加得顺滑,和我们理解的面向对象的思想更加接近。还有一点就是它会保留创建子图之前的改动。

如果我们在这段代码之前加上plt.plot(range(10))的话,那我们看到的结果会是这样的:

subplots

最后一种方法是subplots,它是第二种方法的进化。我们在使用第二种方法的时候有没有一种觉得很麻烦的感觉?因为我们要先创建figure,再通过figure创建subplot。我们最后操作的对象是subplot,既然如此,为什么我们不能直接创建出subplot对象来呢?

所以plt当中提供了subplots方法可以直接创建出figure和subplot对象,我们只需要传入我们希望得到的子图的长和宽即可。由于子图会有多个,所以返回的结果会自动存入一个二维数组当中,我们只需要用数组的形式去访问它即可。

我们来看一个例子:

关于figure和subplot的基本用法就介绍完了,当然除了今天介绍的内容之外,还有很多其他的用法,这些就留到之后的文章介绍吧。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

原文链接,求个关注

- END -

matplotlib | Python强大的作图工具,让你从此驾驭图表(二)的更多相关文章

  1. matplotlib | Python强大的作图工具,让你从此驾驭图表

    今天是数据处理专题的第9篇文章,在之前的8篇文章当中我们已经介绍完了pandas这个库的一些基本用法,我们先把一些冷门的高级用法放一放,先来给大家介绍一下另外一个很有用的数据分析库--matplotl ...

  2. python强大的绘图模块matplotlib示例讲解

    Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...

  3. ProcessOn:功能强大的在线作图工具(HTML5)

    ProcessOn是一款专业作图人员的社交网络,这里汇聚很多业界专家.学者,同时他们分享的作品又形成一个庞大的知识图库,你在学习专业知识的同时还可以结交一些志同道合的新朋友. ProcessOn核心设 ...

  4. Python数据分析环境和工具

    一.数据分析工作环境 Anaconda: Anaconda(水蟒)是一个科学计算软件发行版,集成了大量常用扩展包的环境,包含了 Python 解释器,conda 包管理工具,以及 NumPy.Pand ...

  5. 轻量级SaaS在线作图工具(继之前介绍后完整介绍)

    俗话说“一图胜千言”,在办公应用领域,流程图是一个非常好的表现企业业务流程或工作岗位规范等内容的展现形式,比如去给客户做调研,回来后都要描述出客户的关键业务流程,谁.什么时候.在什么地方.负责什么事情 ...

  6. 轻量级SaaS在线作图工具ProcessOn

    俗话说“一图胜千言”,在办公应用领域,流程图是一个非常好的表现企业业务流程或工作岗位规范等内容的展现形式,比如去给客户做调研,回来后都要描述出客户的关键业务流程,谁.什么时候.在什么地方.负责什么事情 ...

  7. matplotlib python高级绘图库 一周总结

    matplotlib python高级绘图库 一周总结 官网 http://matplotlib.org/ 是一个python科学作图库,可以快速的生成很多非常专业的图表. 只要你掌握要领,画图将变得 ...

  8. Matplotlib Toolkits:地图绘制工具

    Matplotlib Toolkits:地图绘制工具 有没有一种可以直接在详细地图(如谷歌地图)上绘制上百万坐标点的工具???谷歌地图坐标点多了也不能绘制了. Basemap (Not distrib ...

  9. 9款国内外垂直领域的在线作图工具:那些可以替代Visio的应用!【转】

    http://www.csdn.net/article/2015-02-12/2823939 摘要:现在越来越多的创业公司都希望提升办公的效率,今天介绍的几款也能提升办公效率,不过它们都属于垂直领域的 ...

随机推荐

  1. 怎么对比两个excel文档的数据差异

    百度经验: https://jingyan.baidu.com/article/6181c3e0877c7a152ef15304.html

  2. c/c++ 感悟 2008-10-03 02:08

    许久没有坐在电脑前写东西了.除了密密麻麻的英文小虫子,还是英文小虫子.今天不是解决bug,明天就是在创造bug,一句话不在bug中沉默就在bug中爆发.或许喜欢小宇宙爆发的样子吧,那样的感觉总是让人热 ...

  3. MongoDB最新4.2.7版本三分片集群修改IP实操演练

    背景 重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾 ...

  4. markdown 绘图利器之granphviz

    目录 概述 graphviz 脚本语法结构 图 方向,尺寸,间距 节点 shape 属性 多边形 record-based 的形状 用户定制 label 属性 基本用法 HTML用法 style 属性 ...

  5. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统五 | 完善业务自动创建数据库

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...

  6. 牛客网PAT练兵场-打印沙漏

    题目地址:https://www.nowcoder.com/pat/6/problem/4053 题意:模拟题 /** * Copyright(c) * All rights reserved. * ...

  7. 微信商户H5支付申请不通过被驳回解法,拒绝提示:网站有不实内容或不安全信息

    H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付的场景.可以方便从外部浏览器唤起 ...

  8. IDEA报错:Class JavaLaunchHelper is implemented in both

    在IDEA运行一个程序时报错: Class JavaLaunchHelper is implemented in both 这个错误是Mac下Java 的一个bug,意思是这个JavaLaunchHe ...

  9. mysql 8.0.19 win10快速安装教程

    本文教程为大家分享了mysql 8.0.19安装教程,供大家参考,具体内容如下 1.下载.zip安装文件 2.根目录存放my.ini,文件路径用“/”分割,例如: [mysqld] port=3306 ...

  10. Spring Boot 如何快速集成 Redis 哨兵?

    上一篇:Spring Boot 如何快速集成 Redis? 前面的分享栈长介绍了如何使用 Spring Boot 快速集成 Redis,上一篇是单机版,也有粉丝留言说有没有 Redis Sentine ...