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中操作字典之setdefault()方法的使用
May 21 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python argparse模块使用方法解析
Feb 20 Python
Jupyter notebook如何实现指定浏览器打开
May 13 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
Autopep8的使用(python自动编排工具)
Mar 02 Python
Python初学者必备的文件读写指南
Jun 23 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
PHP+javascript模拟Matrix画面
2006/10/09 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
php获取远程文件大小
2015/10/20 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python OS模块常用函数说明
2015/05/23 Python
python 网络编程详解及简单实例
2017/04/25 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
详解Django配置JWT认证方式
2020/05/09 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
外企测试工程师面试题
2015/02/01 面试题
平面设计师工作职责范文
2013/12/03 职场文书
高二学生评语大全
2014/04/25 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
博士论文答辩开场白
2015/06/01 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
MySQL开启事务的方式
2021/06/26 MySQL