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 摘要:现在越来越多的创业公司都希望提升办公的效率,今天介绍的几款也能提升办公效率,不过它们都属于垂直领域的 ...
随机推荐
- 性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 缓存 从 free 命令可以看到,缓存其实就 ...
- Jmeter 常用函数(13)- 详解 __machineIP
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 返回机器(电脑)IP 语法格式 ${_ ...
- 在服务器上使用python-gym出现的显示问题
参考链接: http://www.luyixian.cn/news_show_392045.aspx https://www.cnblogs.com/cenariusxz/p/12666938.htm ...
- muduo源码解析8-date类
date class date:copyable { }: 作用: 此类作用主要是实现年月日和julianDay的互相转换内部最重要的一个数据成员m_julianDayNumber在mymuduo:: ...
- vscode 安装go插件失败后,最简单的方法
vscode 安装go插件 参考: https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md https://goproxy. ...
- 解Bug之路-dubbo应用无法重连zookeeper
前言 dubbo是一个成熟且被广泛运用的框架.饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题.由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排 ...
- VSCode 快速生成.vue基本模板、发送http请求模板
安装vscode 官网:https://code.visualstudio.com/ 安装 Vetur 插件,识别 vue 文件 插件库中搜索Vetur,点击安装,安装完成之后点击重新加载 新建代码片 ...
- 面试中的这些点,你get了吗?
一.前言 因为疫情的原因,小农从七月份开始找工作,到现在已经工作了一个多月了,刚开始找工作的时候,小农也担心出去面试技能不够,要懂的东西很多,自己也准备可能会面试一段时间,从找工作到入职花了十几天,总 ...
- C# 解析获取Url参数值
今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串.样例如下: http://www.cple ...
- 洛谷 P4343 [SHOI2015]自动刷题机
思路 二分答案 显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍-- 可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值, ...