matplotlib | Python强大的作图工具,让你从此驾驭图表(二)
今天是数据处理专题的第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强大的作图工具,让你从此驾驭图表(二)的更多相关文章
- matplotlib | Python强大的作图工具,让你从此驾驭图表
今天是数据处理专题的第9篇文章,在之前的8篇文章当中我们已经介绍完了pandas这个库的一些基本用法,我们先把一些冷门的高级用法放一放,先来给大家介绍一下另外一个很有用的数据分析库--matplotl ...
- python强大的绘图模块matplotlib示例讲解
Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...
- ProcessOn:功能强大的在线作图工具(HTML5)
ProcessOn是一款专业作图人员的社交网络,这里汇聚很多业界专家.学者,同时他们分享的作品又形成一个庞大的知识图库,你在学习专业知识的同时还可以结交一些志同道合的新朋友. ProcessOn核心设 ...
- Python数据分析环境和工具
一.数据分析工作环境 Anaconda: Anaconda(水蟒)是一个科学计算软件发行版,集成了大量常用扩展包的环境,包含了 Python 解释器,conda 包管理工具,以及 NumPy.Pand ...
- 轻量级SaaS在线作图工具(继之前介绍后完整介绍)
俗话说“一图胜千言”,在办公应用领域,流程图是一个非常好的表现企业业务流程或工作岗位规范等内容的展现形式,比如去给客户做调研,回来后都要描述出客户的关键业务流程,谁.什么时候.在什么地方.负责什么事情 ...
- 轻量级SaaS在线作图工具ProcessOn
俗话说“一图胜千言”,在办公应用领域,流程图是一个非常好的表现企业业务流程或工作岗位规范等内容的展现形式,比如去给客户做调研,回来后都要描述出客户的关键业务流程,谁.什么时候.在什么地方.负责什么事情 ...
- matplotlib python高级绘图库 一周总结
matplotlib python高级绘图库 一周总结 官网 http://matplotlib.org/ 是一个python科学作图库,可以快速的生成很多非常专业的图表. 只要你掌握要领,画图将变得 ...
- Matplotlib Toolkits:地图绘制工具
Matplotlib Toolkits:地图绘制工具 有没有一种可以直接在详细地图(如谷歌地图)上绘制上百万坐标点的工具???谷歌地图坐标点多了也不能绘制了. Basemap (Not distrib ...
- 9款国内外垂直领域的在线作图工具:那些可以替代Visio的应用!【转】
http://www.csdn.net/article/2015-02-12/2823939 摘要:现在越来越多的创业公司都希望提升办公的效率,今天介绍的几款也能提升办公效率,不过它们都属于垂直领域的 ...
随机推荐
- .netcore tif文件转jpg,并通过webapi返回
网上能搜到很多关于c# tif转jpg的代码.最简单的就是下面这段获得转换后的图片图片对象.在netcore 中使用这段代码时由于netcore框架已经不自带System.Drawing命名空间了所有 ...
- 通过CMD远程操作Linux系统
一.文件传输 方法:使用sftp连接方式,sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性 命令: //登入:sftp username@ip sftp ...
- Ubuntu18.04 安装 Fabric & 使用 Fabric 测试网络
前言: 本文介绍在 Ubuntu 18.04 中安装 Fabric, 并对 官方文档中的一个小案例(Using the Fabric test network)进行测试. 目的: 初步了解 Fabri ...
- NOIP2007 树网的核 [提高组]
题目:树网的核 网址:https://www.luogu.com.cn/problem/P1099 题目描述 设 T=(V,E,W)T=(V,E,W) 是一个无圈且连通的无向图(也称为无根树),每条边 ...
- count.exe 个人项目
Github项目地址:https://github.com/bravedreamer/wordCount/tree/master/wc 一.题目描述: Word Count1. 实现一个简单而完整的软 ...
- 10、Entity Framework Core 3.1入门教程-执行原生SQL
本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解. 视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR ...
- Git的详细使用
关于Git的详细使用,下面博主的博客写的非常的详细! 可以参考一下. https://blog.csdn.net/qq_19835247/article/details/104620042 人生需要准 ...
- Autoit 使用
一.Autoit 上传文件. 1.常用语法 - WinActivate("title") 聚焦到指定活动窗口 - ControlFocus ( "titl ...
- Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContex
问题描述: 在idea中maven构建web项目,启动Tomcat插件时,出现Failed to start component [StandardEngine[Tomcat].StandardHos ...
- e3mall商城的归纳总结7之solr搭建和应用
敬给读者的话 本文主要应用的技术是solr技术的搭建和应用,本文小编尽量写的更详细一些,让读者在不考虑项目的情况下也能正常完成solr的搭建,说完搭建之后,再说明运行solrj在项目中如何应用solr ...