Python matplotlib多个子图绘制整合


Posted in Python onApril 13, 2022

简单了解多子图

学习matplotlib的时候,有人肯定会觉得为啥不用Excel,为啥不用origin,为啥不直接使用软件,其实matplotlib绘图之所以在python领域经久不衰,是有它的独特之处的,我认为这其中的一个亮点就是,matplotlib绘制多个子图的时候,我们可以根据自己的想法去排列子图的顺序,也可以生成不同的子图数量,类似于前端web可视化大屏,有着较好的用户体验感!

Python matplotlib多个子图绘制整合

使用plt.subplot(mnx) 分别绘制

# -*- coding: utf-8 -*-
 
import matplotlib as mpl
import matplotlib.pyplot as plt
 
t=np.arange(0.0,2.0,0.1)
s=np.sin(t*np.pi)
plt.subplot(2,2,1) #要生成两行两列,这是第一个图
plt.plot(t,s,'b*')
plt.ylabel('y1')
plt.subplot(2,2,2) #两行两列,这是第二个图
plt.plot(2*t,s,'r--')
plt.ylabel('y2')
plt.subplot(2,2,3)#两行两列,这是第三个图
plt.plot(3*t,s,'m--')
plt.ylabel('y3')
plt.subplot(2,2,4)#两行两列,这是第四个图
plt.plot(4*t,s,'k*')
plt.ylabel('y4')
plt.show()

Python matplotlib多个子图绘制整合

使用plt.subplot()方法,生成子图,规则总结如下:

第一个数字是行,第二个数字是列,第三个数字是个数(图形所处顺序的序号)

例如:224就是生成两行两列的子图,本图形是第四个,那么就是第二行第二列的图形

那么有时候,有些人觉得这样太麻烦了,每次生成都要在绘图程序前面加一行这样的代码,为什么不可以一次性生成我需要的画布呢?答案是可以的!

使用plt.subplots(m,n),可以一次性生成m行n列的字图

注意前面需要figure和ax进行接收

调用就和我们数组一样!

使用plt.subplots(m,n)一次性绘制

# -*- coding: utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt
 
t=np.arange(0.0,2.0,0.1)
s=np.sin(t*np.pi)
c=np.cos(t*np.pi)
figure,ax=plt.subplots(2,2) # 多行subplots得到的ax数组是二维的
ax[0][0].plot(t,s,'r*')
ax[0][1].plot(t*2,s,'b--')
ax[1][0].plot(t,c,'g*')
ax[1][1].plot(t*2,c,'y--')

Python matplotlib多个子图绘制整合

# -*- coding: utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
 
t=np.arange(0.0,2.0,0.1)
s=np.sin(t*np.pi)
c=np.cos(t*np.pi)
figure,ax=plt.subplots(1,2,figsize=(6,2),dpi=120)  # 一行subplots得到的ax数组是一维的
ax[0].plot(t,s,'r*')
ax[1].plot(t*2,s,'b--')
plt.subplots(nrows=1,ncols=3,figsize=(5,5))
#plt.subplots(nrows=1,ncols=3)
# 返回一个figure对象,和一个axesSubplot子图对象的数组
# 行或者列等于1,返回一个一维数组

加一个plt.tight_layout()会使得图形更加紧凑

plt.tight_layout()
plt.subplots(nrows=2,ncols=3, figsize=(12,8))  # 如果行列都不为1,那么返回一个2维数组

Python matplotlib多个子图绘制整合

plt.subplots(nrows=3,ncols=4) # 如果行和列都大于1,返回1个Figure对象,和1个包含3*4=12个子图对象的矩阵(2维数组)
# 341      342      343      344
# 345      346      347      348
# 349      3,4,10   3,4,11   3,4,12

Python matplotlib多个子图绘制整合

高级进阶

plt.subplot(121)
plt.subplot(222)
plt.subplot(224)

看到上面你会想到什么?会生成怎样的画布呢?

Python matplotlib多个子图绘制整合

下面我就给大家详细的解释一下,为啥会出现这样的画布,首先我的需求是在左边出现一个子图,比较长的,最好是右边两个子图的长度和,那么应该怎么做呢?遇到这样的情况我们仍然需要把这一个平面分成均等分,那么也就是四个。

当我们画一个左边的图的时候,我们应该把画布想象为一行两列的画布,第一个自然也就是121

当我们画右边的图形的时候,我们应该把画布想象为两行两列的画布,右边第一个自然就是222,第二个自然就是224。

下面我们可以多看几个,来验证我们得推论

plt.subplot(221)
plt.subplot(223)
plt.subplot(122)

Python matplotlib多个子图绘制整合

plt.subplot(211)
plt.subplot(223)
plt.subplot(224)

Python matplotlib多个子图绘制整合

plt.subplot(221)
plt.subplot(222)
plt.subplot(212)

Python matplotlib多个子图绘制整合

plt.figure(figsize=(12,5))
plt.subplot(231)
plt.subplot(233)
plt.subplot(234)
plt.subplot(236)
plt.subplot(132)

Python matplotlib多个子图绘制整合

plt.figure(figsize=(16,5))
plt.subplot(262)
plt.subplot(265)
plt.subplot(268)
plt.subplot(2,6,11)
plt.subplot(132)

Python matplotlib多个子图绘制整合

Python matplotlib多个子图绘制整合

注意这个间隙是自动产生的,如果需要将间隙变的更大,那么就可以取最左边的值和最右边的值

plt.figure(figsize=(16,5))
plt.subplot(241)
plt.subplot(244)
plt.subplot(245)
plt.subplot(2,4,8)
plt.subplot(132)

Python matplotlib多个子图绘制整合

 总结

在生成上面案例的时候,我们需要利用Excel进行编排,不然很容易出错的!

Python 相关文章推荐
python中实现将多个print输出合成一个数组
Apr 19 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
Python中的asyncio代码详解
Jun 10 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
Python离线安装各种库及pip的方法
Nov 28 Python
Python加密技术之RSA加密解密的实现
Apr 08 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
Python实现抢购IPhone手机
2018/02/07 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
银行会计职员个人的自我评价
2013/09/29 职场文书
新任教师自我鉴定
2014/02/24 职场文书
中考冲刺决心书
2014/03/11 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
导游词之无锡唐城
2019/12/12 职场文书