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实现域名系统(DNS)正向查询的方法
Apr 19 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
python批量制作雷达图的实现方法
Jul 26 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
python opencv实现证件照换底功能
Aug 19 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
写好Python代码的几条重要技巧
May 21 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
Prototype Class对象学习
2009/07/19 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
Python的历史与优缺点整理
2020/05/26 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
施工资料员的岗位职责
2013/12/22 职场文书
运动会开幕式解说词
2014/02/05 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
警示教育活动总结
2014/05/05 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
应急管理培训方案
2014/06/12 职场文书
小学教师自我评价
2015/03/04 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
结婚幸福感言
2015/08/01 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
Python集合的基础操作
2021/11/01 Python