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操作gmail实例
Jan 14 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
python实现画圆功能
Jan 25 Python
通过python顺序修改文件名字的方法
Jul 11 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
Python进行统计建模
Aug 10 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Windows下python3.6.4安装教程
2018/07/31 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
python 多线程中join()的作用
2020/10/29 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
内衣营销方案
2014/03/15 职场文书
2014年党小组工作总结
2014/12/20 职场文书
党员评议自我评价
2015/03/03 职场文书
小学安全工作总结2015
2015/05/18 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL