在matplotlib中创建子图的多种方式

Python Matplotlib 子图 使用python绘制多个子图的场景,子图的布局,数据显示,以及图形组合问题解决。 阅读详情

在用Matplotlib绘制图像时,有时候需要从多个角度对数据进行对比。为此子图的概念便提了出来,子图可以在较大的图形中同时放置一组较小的坐标轴。这些子图可能是画中画、网格图,或者是其他更复杂的布局形式。

创建子图常用的可以有如下三种方式。

  • 使用add_subplot()面向对象的方式来创建子图

使用面向对象的方式创建子图前,需要创建一个figure对象,如fig = plt.figure(),然后在图像布局中绘制子图,下列例子中,我们用fig.add_subplot(221)绘制了2行2列子图,而221代表创建2行2列一共4个子图,并从左往右第1个子图开始绘图。假设我们要绘制2行6列子图,当画到第10块子图时,那么第10块该怎么写呢?2610是不行的,可以用另一种方式(2, 6, 10)

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)

# 创建图像布局对象fig
fig = plt.figure(figsize = (12, 6))

# 221代表创建2行2列一共4个子图,并从左往右第1个子图开始绘图。
ax1 = fig.add_subplot(221)
ax1.plot(x, x)

ax2 = fig.add_subplot(222)
ax2.plot(x, -x)

ax3 = fig.add_subplot(223)
ax3.plot(x, x ** 2)

ax4 = fig.add_subplot(224)
ax4.plot(-x, x ** 2)

plt.show()

显示的图像如下:
在这里插入图片描述

  • 使用pyplot方式直接创建子图

除了使用上面,面向对象的方式创建图外,我们还可以直接使用pyploy(也就是我们声明的别名plt)直接创建子图对象,而不需要先声明实例对象的方式去创建,最终绘图得到的图像是一模一样的。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)

plt.figure(figsize = (12, 6))
# 先画好子图具体位置
plt.subplot(221)
# 在该子图下绘图
plt.plot(x, x)

plt.subplot(222)
plt.plot(x, -x)

plt.subplot(223)
plt.plot(x, x ** 2)

plt.subplot(224)
plt.plot(-x, x ** 2)

plt.show()
  • 使用subplots创建多个子图

注意:如果设置的nrows = 1,ncols = 3也就是1行3列的话,axes的引用格式就不是axes[0][1],axes[0][2], axes[0][3]这样子。而是直接使用axes[0], axes[1], axes[2], 不然会报错。因为默认1行就不算是多维数组,所以不需要多维数组访问的方式。

import numpy as np
import matplotlib.pyplot as plt

# 将画布分割为2行2列,起始值为0。
fig, axes = plt.subplots(figsize = (12, 6), nrows = 2, ncols = 2)
# 给第1行第1列绘图
axes[0][0].hist(np.random.rand(500), label = 'hist0', edgecolor = 'black')
# 给图形添加标签
axes[0][0].legend()

axes[0][1].hist(np.random.rand(500), label = 'hist1', edgecolor = 'black')
axes[0][1].legend()

axes[1][0].hist(np.random.rand(500), label = 'hist2', edgecolor = 'black')
axes[1][0].legend()

axes[1][1].hist(np.random.rand(500), label = 'hist3', edgecolor = 'black')
axes[1][1].legend()

plt.show()

显示的图像如下:
在这里插入图片描述

除此之外,如果要实现更复杂的排列方式,比如说实现不规则的多行多子列图有没有什么办法呢?万能的matplotlib图库当然有办法,那就是使用plt.GridSpec(),不过plt.GridSpec()对象本身不能直接创建一个图形,他其实只是plt.subplot()命令可以识别的一个简易接口。

  • plt.GridSpec:实现更复杂的排列方式
import numpy as np
import matplotlib.pyplot as plt

# 声明一个GridSpec对象实例,创建的是2行3列的图像布局。
grid = plt.GridSpec(nrows=2, ncols=3, wspace=0.2, hspace=0.2)

# 设置整个图像大小。
plt.figure(figsize = (12, 6))
# 第一个子图的具体排列位置为(0,0)。
plt.subplot(grid[0, 0])
plt.hist(np.random.rand(50), orientation='horizontal', edgecolor = 'black')

plt.subplot(grid[0, 1:])
plt.scatter(np.random.rand(100),np.random.rand(100), color = 'r', edgecolor = 'black')

plt.subplot(grid[1, :2])
plt.plot(np.arange(10), np.random.rand(10))

plt.subplot(grid[1, 2]);
plt.plot(np.arange(10), np.arange(10) ** 2)

plt.show()

可以看到最终的绘制效果图如下,实现了不规则的图形。

在这里插入图片描述

这个例子中有几个参数要特别说明下,因为一开始会让不少人感到困惑,就是关于创建不规则子图的参数指定,因为这决定了子图的排列规则。例子中4个子图的位置分别是grid[0, 0]、grid[0, 1:]、grid[1, :2]、grid[1, 2]它们到底代表着什么呢,怎么理解呢。

可以这样理解,一开始我们声明创建的是2行3列的一个图像布局网格,我们可以想象成我们创建的是一个二维数组,类似如下这样,如果一行的宽度按100%计算的话,每个元素占据的宽度可以理解为33.33%:

[1, 2, 3]
[4, 5, 6]

第一个子图的位置是grid[0, 0]:按照这个[0, 0]的下标取值为第1行第1列的元素,得到的是1这个元素位置宽度(大概是33.33%的宽度)。

第二个子图的位置是grid[0, 1:]:按照这个[0, 1:]的下标取值为第1行第2列的之后所有的元素,得到的是2, 3这个元素位置宽度。所以你可以从效果图中看到第2个子图占据了第一行一大半的宽度(大概是66.66%的宽度)。

第三个子图的位置是grid[1, :2]:按照这个[1, :2]的下标取值为第2行第1列起到第3列之间所有的元素,得到的是4, 5这个元素位置宽度。所以你可以从效果图中看到第3个子图占据了第二行一大半的宽度(大概是66.66%的宽度)。

第四个子图的位置是grid[1, 2]:按照这个[1, 2]的下标取值为第2行第3列的元素,得到的是6这个元素位置宽度。所以你可以从效果图中看到第4个子图只占据了一个元素的宽度(大概是33.33%的宽度)。

python数据可视化玩转Matplotlib subplot子图操作,四个子图(一包四),三个子图,子图拉伸 子图是Matplotlib中强大的功能之一。使用函数,您可以方便地创建多个子图,并使用Axes对象绘制各种图形。使用各种选项,例如figsizewspace和hspace参数,以及GridSpec对象,可以更改子图的大小、位置和间距。 阅读详情

相关推荐

Matplotlib 多子图绘制

多子图绘制的N种方法。

早起CaiCai的学习空间 1536

Matplotlib(二)—— 子图

Matplotlib(二): 子图

share16的博客 4690

matplotlib子图绘制

从绘图流程出发,【plt】图像有三个层级,依次是窗口、坐标系以及图像。在一个坐标系中可以有多条曲线,即表示多个图像;相应地在一个窗口中,也应该可以容纳多组坐标系,每组坐标便是一个子图。

微小冷的学习笔记 1392

【数据分析之道-Matplotlib(三)】Matplotlib 绘制子图

Matplotlib支持多种绘制多图的方法,其中最常用的是subplot和subplots函数。subplot函数可以将一个图像分成若干个小区域,并在其中绘制子图,而subplots函数可以一次性创建多个子图,并返回一个包含所有子图的数组对象。

阿极的博客 6392

AVM环视算法实战:从3D碗型投影到多场景模式切换的实现与优化

本文深入探讨了AVM环视算法在3D碗型投影和多场景模式切换中的实现与优化。通过分析3D碗型投影的核心原理和动态视角调节技术,展示了如何实现从超广角模式到转向模式的无缝切换。文章还分享了性能优化实战经验,包括实时性提升和图像拼接质量优化,为开发者提供了宝贵的AVM系统开发指南。

weixin_42573113的博客 168

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9003

python中matplotlib介绍_python中matplotlib库的相关介绍

import matplotlib.pyplot as pltimport numpy as npfrom pylab import *plt.bar([1,3,5,7,9],[5,2,7,8,2]) #创建条形图plt.xlabel('bar number') #x轴标签plt.ylabel('bar height')plt.show()多个图的创建import matplo...

weixin_35117981的博客 255

MIT6.824-lab2D-2022(日志压缩详细讲解)

从paper中去讲解,并实现关于lab2D的代码。

幸平的博客 6035

matplotlib.pyplot.subplot

matplotlib.pyplot.subplot

荣耀之路 3552

ZYNQ专题-7020驱动KSZ9031 PHY芯片

之所以有这篇文章,得益于Alinx的开发板。

Anitawen的博客 4961

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1182

matplotlib的一些代码

Matplotlib Python 画图教程 (莫烦Python)_演讲•公开课_科技_bilibili_哔哩哔哩 https://www.bilibili.com/video/av16378354/?from=search&seid=16336534570780842214"""画3D图""" import numpy as np import matplotlib.p...

weixin_30797027的博客 415

智能座舱语音测试避坑指南:从唤醒率到方言识别,这些场景你测全了吗?

本文深入解析智能座舱语音测试的关键场景与避坑指南,涵盖唤醒率测试、方言识别、多音区交互等复杂场景。通过实战案例与自动化测试方案,帮助开发者全面提升语音系统的可靠性与用户体验,特别关注环境噪声干扰与方言覆盖策略。

weixin_42613501的博客 496

Matplotlib绘制图形之初步介绍

Matplotlib是一个Python的绘图库,它可与 NumPy 一起使用,可以代替Matlab使用。 其优点有:(1)将数据进行可视化,使数据更直观;(2) 使数据更加更具有说服力。由于Matplotlib是第三方库,所以需要安装它才可以使用。 安装命令: pip install matplotlib 安装可参考官网: https://matplotlib.org/users/installing.html 注意: Matplotlib3.0要求python3版本才可安装使用。 图片与子图的介绍 Mat

m0_45209371的博客 1067

自动驾驶轨迹规划算法——Apollo EM Planner

Apollo EM Planner 是百度自动驾驶系统中的轨迹规划算法,采用期望-最大化(EM)迭代优化思想。其核心是将轨迹规划分解为路径优化(E-Step)和速度优化(M-Step)两个子问题,在Frenet坐标系下交替求解。算法先通过动态规划(DP)搜索粗路径,再使用二次规划(QP)进行平滑优化,并结合障碍物信息生成安全走廊。相较Lattice、Hybrid A*等规划器,EM Planner具有更好的实时性、动态障碍物处理能力和轨迹平滑性,适用于城市道路、高速公路等复杂场景。该算法通过解耦路径与速度优

swaggytiger的博客 2666

基于ESM3微调的抗菌肽生成器:技术方案与实现

基于ESM3微调的抗菌肽生成器:技术方案与实现 摘要 本文提出了一种基于ESM3蛋白质语言模型的抗菌肽生成框架,采用两阶段训练策略:先在151万肽序列上预训练,再在1.3万抗菌肽数据上微调。模型能够生成具有合理长度分布、低重复率且高新颖性的抗菌肽序列。文章详细介绍了数据预处理流程、模型架构设计、训练策略及评估方法,为抗菌肽的理性设计提供了有效的计算工具。实验结果表明,该方法生成的抗菌肽序列在保持生物活性的同时具有较高的结构多样性。 关键词:抗菌肽设计;蛋白质语言模型;ESM3;深度学习;序列生成

huanghm88的专栏 175

深入了解Matplotlib中的子图创建方法

在本博客中,我们深入了解了Matplotlib中的子图创建方法,主要聚焦于add_axes()和add_subplot()两种常用方法。这两种方法在创建子图时各具优缺点,选择合适的方法取决于具体的需求和布局要求。

m0_74195174的博客 2299

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

matplotlib.pyplot创建子图的方式

一个作图的窗口就是一个Figure, 在Figure上可以有很多个Axes/Subplot,每一个Axes/Subplot为一个单独的绘图区,可以在上面绘图。其中每一个Axes/subplot, 有XAxis,YAxis,在上面可以标出刻度,刻度的范围,以及X、Y轴的标签label。 1. 面向对象的方式 1.1 创建Figure figure(num=None, figsize=No...

prosmail的博客 2894

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Python Matplotlib subplot函数详解:创建子图

使用 Matplotlib 除可以生成包含多条折线的复式折线图之外,它还允许在一张数据图上包含多个子图。 调用subplot() 函数可以创建一个子图,然后程序就可以在子图上进行绘制。subplot(nrows, ncols, index, **kwargs) 函数的 nrows 参数指定将数据图区域分成多少行;ncols 参数指定将数据图区域分成多少列;index 参数指定获取第几个区域。 ...

人生苦短, 还不用Python? 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Matplotlib绘图基础——创建画布、子图、图例等

Matplotlib中应用最广的是matplotlib.pyplot模块,其绘制遵循以下流程:创建画布—(是否创建子图—选定子图)—添加标题、添加xy轴名称、修改xy轴刻度与范围—绘制图形—添加图例—完成绘制—保存图形—显示图形 1.创建画布 首先构建一张空白画布,并可选择是否划分成多个画布。当只绘制一幅时,可省略该步骤。创建画布函数为:plt.figure()。...

zm_1900的博客 1万+

Matplotlib画布和子图创建

@

hc645395861的博客 2223

matplotlib创建子图的四种方法

文章目录方法一,利用subplots()方法二,利用add_subplot()创建子图方法三,利用pandas+plot()直接创建子图 方法一,利用subplots() import matplotlib.pyplot as plt fig,axes=plt.subplots(2,2,figsize=(5,4), sharex=False, ...

辉的博客 6699

调整Matplotlib子图的大小

前段时间就遇到了这个问题,一直忘了写,今晚夜深人静总结一波~ 问题 我相信,看到这篇博客的人,你肯定已经会使用Matplotlib中的pyplot画图。 比如下面这种图 你也应该会调整单个图的大小了,就是使用如下语句控制单个图形figure的大小,比如我这里设的8*6的。 fig3 = plt.figure(figsize=(8,6)) 但随着继续深入的学习,有时我们很有必要将两个图画在一起,来做对比,所以你也应该会在一个画布上画多个子图了。比如下图 即是通过subplot实现...

little_spice的博客 2万+

Matplotlib子图

子图 **有时候我们需要从多个角度进行数据的比较、分析,因此就需要用到子图。**子图的本质是在一个较大的图形中同时放置一组较小的坐标轴,布局形式可以多种多样,不拘泥于我们在第五集中举的那种网格图的形式。 一般化的子图 我们先进行一般化的子图布局。 首先要创建各个子图的坐标轴,传入一个四元列表参数:[x,y,width,height],用来表示这个子图坐标轴原点的x坐标、y坐标,以及宽和高。值得注意的是,这四个值的取值范围都是[0,1],我们约定整个大图的左下端为原点(0,0),右上端为(1,1)。那么x,y

Joey9898的博客 3655

Python Matplotlib 子图绘制

Matplotlib 是 Python 中最流行的绘图库之一,广泛用于数据可视化。它支持多种图表类型,包括折线图、散点图、条形图等。通过 Matplotlib,我们可以创建静态、动态和交互式的图表。通过这两个示例,我们可以看到subplot()和subplots()的基本用法。subplots()方法返回一个axes数组,允许我们更方便地对每个子图进行设置。在实际应用中,我们常常需要对子图进行样式和布局的自定义,以使得图表更加美观和易于解读。

chusheng1840的博客 2088

matplotlib 基础_子图创建

matplotlib基础子图创建

qq_44511163的博客 5091
上一篇: 路径处理库pathlib使用详解
下一篇: pandas中map和applymap及apply的区别
itanders
博客等级 码龄19年 178粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值