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使用matplotlib绘制折线图教程
Feb 08 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
Python自定义线程池实现方法分析
Feb 07 Python
python实现内存监控系统
Mar 07 Python
对python产生随机的二维数组实例详解
Dec 13 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
浅析python的Lambda表达式
Feb 27 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
python保存字典和读取字典的实例代码
Jul 07 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
python上selenium的弹框操作实现
Jul 13 Python
使用tensorflow 实现反向传播求导
May 26 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
利用PHP创建动态图像
2006/10/09 PHP
上传多个文件的PHP脚本
2006/11/26 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
用jscript启动sqlserver
2007/06/21 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python正则表达式常用函数总结
2017/06/24 Python
Python初学者常见错误详解
2019/07/02 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
一套SQL笔试题
2016/08/14 面试题
工商企业管理应届生求职信
2013/11/03 职场文书
测绘工程个人的自我评价
2013/11/10 职场文书
手机业务员岗位职责
2013/12/13 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
应用外语系自荐信
2014/06/26 职场文书
具结保证书
2015/01/17 职场文书
如何书写授权委托书?
2019/06/25 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技