当前位置: 首页 > news >正文

Python-matplotlib库画不规则图

matplotlib库之画不规则图

  • subplot2grid()实现灵活的网格布局
  • GridSpec
    • 基本参数
  • 简单的不规则

在 Matplotlib 中绘制不规则排列的图形(如大小不同、跨行跨列的子图)

subplot2grid()实现灵活的网格布局

  • 🏵️ 通过指定子图跨越的行数和列数实现不规则排列。
  • 🏵️ plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)。
  • 🏵️ shape:网格的总行数和总列数,例如 (3, 3) 表示 3 行 3 列。
  • 🏵️ loc:子图的左上角位置,格式为 (行索引, 列索引),索引从 0 开始。
  • 🏵️ rowspan:子图跨越的行数(默认 1),colspan:子图跨越的列数(默认 1)。
  • 🏵️ fig:指定要添加子图的 Figure 对象(默认使用当前 Figure)。
import matplotlib.pyplot as pltplt.figure(figsize=(10, 8))ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)  # 3行3列的图,从0行0列开始,占1行3列
ax1.set_title('rowspan=0, colspan=3')ax2 = plt.subplot2grid((3, 3), (1, 0), rowspan=2)   # 3行3列的图,从1行0列开始,占2行1列
ax2.set_title('rowspan=2, colspan=1')ax3 = plt.subplot2grid((3, 3), (1, 1), rowspan=1, colspan=2)  # 3行3列的图,从1行1列开始,占1行2列
ax3.set_title('rowspan=1, colspan=2')ax4 = plt.subplot2grid((3, 3), (2, 1))  # 3行3列的图,从2行1列开始,占1行1列
ax4.set_title('rowspan=1, colspan=1')ax5 = plt.subplot2grid((3, 3), (2, 2))  # 3行3列的图,从2行2列开始,占1行1列
ax5.set_title('rowspan=1, colspan=1')
plt.tight_layout()
plt.show()

在这里插入图片描述

GridSpec

  • 🏵️ GridSpec 是一个强大的子图布局工具,用于创建灵活的不规则子图网格。
  • 🏵️ subplot2grid() 相比,GridSpec 提供更精细的控制,适合复杂的布局需求。
  • 🏵️ GridSpec 本质上是一个网格布局管理器,可以定义网格的总行数和列数,为每个子图分配网格区域(可跨行、跨列),调整子图之间的间距和边距。
  • 🏵️ fig.add_subplot(gs[1, :2]) 指明了subplot占据的gs的网格。
  • 🏵️ 先创建GridSpec,画图时使用ax1 = fig.add_subplot(gs[0, 0]) fig.add_subplot的参数是gs的网格位置。

基本参数

参数说明举例
nrowsint 网格的总行数3(创建 3 行网格)
ncolsint 网格的总列数4(创建 4 列网格)
leftfloat 子图区域的左边界(相对于画布宽度的比例,范围 0-1)0.1(左侧保留 10% 空间)
rightfloat 子图区域的右边界(相对于画布宽度的比例)0.9(右侧保留 10% 空间)
bottomfloat 子图区域的下边界(相对于画布高度的比例)0.1
topfloat 子图区域的上边界(相对于画布高度的比例)0.9
wspacefloat 列与列之间的间距(以平均子图宽度的比例表示)0.3(间距为子图宽度的 30%)
hspacefloat 行与行之间的间距(以平均子图高度的比例表示)0.4
width_ratioslist[float] 各列宽度的相对比例[2, 1, 1](第 1 列宽度是后两列的 2 倍)
height_ratioslist[float] 各行高度的相对比例[1, 2](第 2 行高度是第 1 行的 2 倍)
figureFigure 指定要应用 GridSpec 的 Figure 对象(默认使用当前 Figure)fig
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpecfig = plt.figure(figsize=(8, 6))# 创建 GridSpec,设置各种参数
gs = GridSpec(nrows=2, ncols=3,           # 2行3列figure=fig,                 # 指定 Figureleft=0.1, right=0.9,        # 左右边距bottom=0.1, top=0.9,        # 上下边距wspace=0.3, hspace=0.4,     # 列间距和行间距width_ratios=[2, 1, 1],     # 列宽比例height_ratios=[1, 2]        # 行高比例
)ax1 = fig.add_subplot(gs[0, 0])  # 第一行第一列
ax2 = fig.add_subplot(gs[0, 1:]) # 第一行,第二和第三列
ax3 = fig.add_subplot(gs[1, :2]) # 第二行,第一和第二列
ax4 = fig.add_subplot(gs[1, 2])  # 第二行第三列
plt.suptitle("GridSpec")
plt.show()

在这里插入图片描述

简单的不规则

-🍁 在plt.subplots中gridspec_kw以字典的类型是说明各个参数的值,width_ratios, height_ratios说明了各个子图的大小。
-🍁 单独再画各个子图。

import matplotlib.pyplot as pltfig, axes = plt.subplots(2, 2,                        # 2行2列figsize=(8, 6),gridspec_kw={'left': 0.15,  # 左侧保留15%空间'right': 0.95,  # 右侧保留5%空间'bottom': 0.1,  # 底部保留10%空间'top': 0.9,  # 顶部保留10%空间'wspace': 0.3,  # 列间距'hspace': 0.3,  # 行间距'width_ratios': [3, 1],  # 第一列宽度是第二列的3倍'height_ratios': [1, 2]  # 第二行高度是第一行的2倍}
)
ax = axes.flatten()
ax[0].set_title('axes0')
ax[1].set_title('axes1')
ax[2].set_title('axes2')
ax[3].set_title('axes3')
fig.suptitle("gridspec_kw")
plt.show()

在这里插入图片描述

http://www.lqws.cn/news/79021.html

相关文章:

  • 【CVE-2025-4123】Grafana完整分析SSRF和从xss到帐户接管
  • Hadoop学习笔记
  • Docker 与 Harbor 私有仓库:镜像管理与版本控制的完整实践
  • Google机器学习实践指南(TensorFlow六大优化器)
  • 结构化控制语言(SCL) 与梯形图(LAD)相互转换的步骤指南
  • LabVIEW轴角编码器自动检测
  • 【数据分析】第四章 pandas简介(1)
  • Haproxy搭建web群集
  • 【Java Web】6.登入认证
  • YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)
  • NodeJS全栈WEB3面试题——P5全栈集成与 DApp 构建
  • Codeforces Round 1028 (Div. 2)(A-D)
  • MyBatisPlus--条件构造器及自定义SQL详解
  • Day43 Python打卡训练营
  • 人工智能工程技术专业 和 其他信息技术专业 有哪些关联性?
  • Sui 中文社区月度激励计划
  • LearnOpenGL-笔记-其十三
  • uniApp页面交互
  • 【算法设计与分析】实验——二维0-1背包问题(算法分析题:算法思路),独立任务最优调度问题(算法实现题:实验过程,描述,小结)
  • 杂散的处理
  • 【存储基础】【VFS】inodedentrysuper_block以及它们之间的关系
  • C++哈希表:冲突解决与高效查找
  • Cesium使用primitive添加点线面(贴地)
  • Linux中的mysql备份与恢复
  • 查找和最小的K对数字
  • 软件开发项目管理工具选型及禅道开源版安装
  • 使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询
  • UE5 创建2D角色帧动画学习笔记
  • HealthBench医疗AI评估基准:技术路径与核心价值深度分析(下)
  • 湖北理元理律所:企业债务重组中的“法律缓冲带”设计