python中使用 Matplotlib 的 GridSpec 来实现更复杂的布局控制

news2024/11/26 16:41:52

matplotlib.gridspec 是 Matplotlib 库中的一个模块,用于创建复杂的子图布局。GridSpec 提供了更精细的控制,允许你定义不同大小和位置的子图。下面是对 GridSpec 的详细介绍和一些常见用法示例:

1. 基本用法

GridSpec 类似于表格布局,可以定义子图占据的行和列:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(2, 2)

ax1 = fig.add_subplot(gs[0, 0])
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')

ax2 = fig.add_subplot(gs[0, 1])
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2')

ax3 = fig.add_subplot(gs[1, 0])
ax3.plot([1, 2, 3], [1, 2, 3])
ax3.set_title('Subplot 3')

ax4 = fig.add_subplot(gs[1, 1])
ax4.plot([1, 2, 3], [3, 2, 1])
ax4.set_title('Subplot 4')

plt.tight_layout()  # 调整布局
plt.show()

运行结果:

2. 子图跨行跨列

你可以通过切片语法让子图跨越多行或多列:

fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(3, 3)

ax1 = fig.add_subplot(gs[0, :])
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1: span all columns')

ax2 = fig.add_subplot(gs[1, :-1])
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2: span first 2 columns')

ax3 = fig.add_subplot(gs[1:, -1])
ax3.plot([1, 2, 3], [1, 2, 3])
ax3.set_title('Subplot 3: span last 2 rows')

ax4 = fig.add_subplot(gs[-1, 0])
ax4.plot([1, 2, 3], [3, 2, 1])
ax4.set_title('Subplot 4')

ax5 = fig.add_subplot(gs[-1, -2])
ax5.plot([1, 2, 3], [4, 3, 2])
ax5.set_title('Subplot 5')

plt.tight_layout()
plt.show()

运行结果:

3. 调整子图间距

你可以使用 GridSpec 的参数调整子图之间的间距:

fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(2, 2, width_ratios=[2, 1], height_ratios=[1, 2], wspace=0.4, hspace=0.3)

ax1 = fig.add_subplot(gs[0, 0])
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')

ax2 = fig.add_subplot(gs[0, 1])
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2')

ax3 = fig.add_subplot(gs[1, 0])
ax3.plot([1, 2, 3], [1, 2, 3])
ax3.set_title('Subplot 3')

ax4 = fig.add_subplot(gs[1, 1])
ax4.plot([1, 2, 3], [3, 2, 1])
ax4.set_title('Subplot 4')

plt.tight_layout()
plt.show()

运行结果:

4. 嵌套的 GridSpec

你可以在一个子图中嵌套另一个 GridSpec

fig = plt.figure(figsize=(8, 6))
gs0 = gridspec.GridSpec(1, 2)

gs1 = gridspec.GridSpecFromSubplotSpec(3, 1, subplot_spec=gs0[0])
ax1 = fig.add_subplot(gs1[0])
ax2 = fig.add_subplot(gs1[1])
ax3 = fig.add_subplot(gs1[2])

gs2 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[1])
ax4 = fig.add_subplot(gs2[0, :])
ax5 = fig.add_subplot(gs2[1, :-1])
ax6 = fig.add_subplot(gs2[1:, -1])
ax7 = fig.add_subplot(gs2[-1, 0])
ax8 = fig.add_subplot(gs2[-1, -2])

plt.tight_layout()
plt.show()

运行结果:

总结

matplotlib.gridspec 提供了灵活的布局方式,允许用户创建复杂的子图排列。通过使用 GridSpec,你可以方便地调整子图的大小、位置以及跨越行和列的方式,从而实现更为复杂和美观的图表布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1805558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言数据分析16-针对芬兰污染指数的分析与考察

1. 研究背景及意义 近年来,随着我国科技和经济高速发展,人们生活质量也随之显著提高。但是, 环境污染问题也日趋严重,给人们的生活质量和社会生产的各个方面都造成了许多不 利的影响。空气污染作为环境污染主要方面,更…

FCN-语义分割中的全卷积网络

FCN-语义分割中的全卷积网络 语义分割 语义分割是计算机视觉中的关键任务之一,现实中,越来越多的应用场景需要从影像中推理出相关的知识或语义(即由具体到抽象的过程)。作为计算机视觉的核心问题,语义分割对于场景理…

QT C++(QT控件 QPushButton,QRadioButton,QCheckBox)

文章目录 1. QPushButton 普通按钮2. QRadioButton 单选按钮3. QCheckBox 复选按钮 1. QPushButton 普通按钮 QPushButton中的重要属性 text:按钮中的文本icon:按钮的图标iconSize:按钮中图标的尺寸shortCut:按钮对应的快捷键&a…

关于烫烫烫和屯屯屯

微较的msvc编译器,调试模式下为了方便检测内存的非法访问,对于不同的内存做了初始化, 未初始化栈: 0xCCCCCCCC 未初始化堆: 0xCDCDCDCD 已释放的堆: 0xDDDDDDDD 0xCCCC解释为GB2312字符即是烫&#xff…

“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“

前言:在Java编程中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两个非常重要的概念。它们涉及到对象在内存中的复制方式,对于理解对象的引用、内存管理以及数据安全都至关重要。 ✨✨✨这里是秋…

AI视频教程下载:如何用ChatGPT来求职找工作?

这是一个关于使用ChatGPT找工作的课程,作者分享了自己的求职经验和技巧,介绍了如何使用人工智能来改进个人资料和简历,以及如何研究公司和面试。通过细节处理职业目标、分享个人兴趣和技能、寻求导师和专业发展机会,以及在行业内建…

【K8s源码分析(三)】-K8s调度器调度周期介绍

本文首发在个人博客上,欢迎来踩! 本次分析参考的K8s版本是v1.27.0。 K8s的整体调度框架如下图所示。 调度框架顶层函数 K8s调度器调度的核心函数schedulerone在pkg/scheduler/schedule_one.go:62,如下,这里将一些解释写在了注…

CTF Show MISC做题笔记

MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件:misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息:flag{flag…

Autosar Dem配置-Condition(TRC)的使用-基于ETAS软件

文章目录 前言Dem配置DemEnableConditionDemEnableConditionIdDemEnableConditionStatus DemEnableConditionGroupDemEventParameter 接口配置代码实现总结 前言 在车辆工作状态下,每个DTC检测可能都需要一个前提条件,否则如果任何条件下都可以进行DTC检…

【ARM Cache 与 MMU 系列文章 7.3 – ARMv8/v9 MMU 块描述符与页表描述符】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 上篇文章:【ARM Cache 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】 文章目录 MMU 块描述符与页描述符Block DescriptorBlock descriptor formatsBlock Entry 介绍Block En…

【C#】开发过程中记录问题

1.DateTimePicker控件获取时间 拖动控件,设置属性format为custom格式。例如我想获得20240101这种类型的string类型的数据: string DateTime = DateTimePicker.Value.ToString("yyyyMMdd");2.ComboBox下拉列表控件 默认为DropDown,下拉可修改。 DropDownList为下…

《Windows API每日一练》

2.2.8 第15练:处理WM_CLOSE消息 /*------------------------------------------------------------------------ 015 编程达人win32 API每日一练 第15个例子WM_CLOSE.C:回调函数---处理WM_CLOSE消息 WM_CLOSE消息 DestroyWindow函数 注意&#xf…

SprirngBoot+Vue房屋租赁系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 租客管理员 功能截图

Git【版本控制命令】

02 【本地库操作】 1.git的结构 2.Git 远程库——代码托管中心 2.1 git工作流程 代码托管中心用于维护 Git 的远程库。包括在局域网环境下搭建的 GitLab 服务器,以及在外网环境下的 GitHub 和 Gitee (码云)。 一般工作流程如下: 1.从远程…

[Cesium学习]

Popup弹窗 Cesium点位弹窗_cesium popup弹窗-CSDN博客 Cesium构造popup弹窗函数_cesium popup-CSDN博客 开发之家 - Cesium构造popup弹窗函数 GitHub - cesium-plugin/cesium-popup-es6: 气泡弹窗 热力图分析 // 创建Cesium Viewer实例 const viewer new Cesium.Viewer(c…

C#中使用Mysql批量新增数据 MySqlBulkCopy

在C#中使用MySqlBulkCopy类来批量复制数据到MySQL数据库,首先需要确保你的项目中已经引用了MySQL Connector。以下是使用MySqlBulkCopy的基本步骤: 1.安装MySQL Connector。 可以通过NuGet安装MySQL Connector: 2.在代码中引用必要的命名空间…

安装 JDK 17

安装包 百度网盘 提取码:6666 安装步骤 双击下载得到的安装包,开始安装: 正在安装: 安装完成: 安装路径下,多出来了很多新的内容。安装文件夹所包含的内容及作用: src 是 JDK 的源码包。类库…

DevExpress WPF中文教程:Grid - 如何向项目添加GridControl并绑定到数据

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

VueRouter路由与Vuex状态管理

前言 随着前端技术的快速发展和前后端分离架构的普及,单页面应用(SPA)已成为现代Web开发的主流。在SPA中,前端路由和状态管理扮演着至关重要的角色。Vue3作为当前流行的前端框架之一,提供了强大的路由(Vue …

sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 7 SQLI DUMB SERIES-7判断注入点 进入页面中,并输入数据查看结果。 发现空数据提…