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 isinstance判断对象类型
Sep 06 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python实现飞机大战
Sep 11 Python
python 获取图片分辨率的方法
Jan 08 Python
如何基于python生成list的所有的子集
Nov 11 Python
python with语句的原理与用法详解
Mar 30 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
python+flask编写一个简单的登录接口
Nov 13 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
使用pandas模块实现数据的标准化操作
May 14 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
django-allauth入门学习和使用详解
2019/07/03 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
python进阶之自定义可迭代的类
2019/08/20 Python
浅析Python面向对象编程
2020/07/10 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
英国在线花园中心:You Garden
2018/06/03 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
客服工作职责
2013/12/11 职场文书
装修五一活动策划案
2014/01/23 职场文书
2014年资料员工作总结
2014/11/18 职场文书
委托书英文
2015/01/28 职场文书
青岛导游词
2015/02/12 职场文书
南京大屠杀观后感
2015/06/02 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书