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数据结构之列表和元组的详解
Sep 23 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
pytorch查看模型weight与grad方式
Jun 24 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
You might like
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP 正则表达式小结
2015/02/12 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Python实现微信好友的数据分析
2019/12/16 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
《她是我的朋友》教学反思
2014/04/26 职场文书
环保宣传标语
2014/06/12 职场文书
鲁迅故居导游词
2015/02/05 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书