当前位置: 首页 > 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.xdnf.cn/news/764353.html

相关文章:

  • 机器视觉图像处理之图像滤波
  • LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上
  • 深度学习与神经网络 前馈神经网络
  • 【LeetCode】数组刷题汇总记录
  • 二、Kubernetes 环境搭建
  • vue中父子参数传递双向的方式不同
  • Git GitHub Gitee
  • Windows环境下Scoop包管理工具的全面指南
  • [yolov11改进系列]基于yolov11引入特征融合注意网络FFA-Net的python源码+训练源码
  • 自定义序列生成器之单体架构实现
  • I2C Host Adapter (1)
  • 移除3D对象的某些部分点云
  • 使用TDEngine REST API + Python来计算电力指标的ETL真实案例
  • 前端框架Vue
  • CTF:网络安全的实战演练场
  • 系统级 EOS 测试方法 - System Level EOS Testing Method
  • Ⅱ.计算机二级选择题(运算符与表达式)
  • C++之动态数组vector
  • 【软件测试】测试框架(unittest/pytest)
  • 【Elasticsearch】ILM(Index Lifecycle Management)策略详解
  • 【Java Web】速通Tomcat
  • Origin将杂乱的分组散点图升级为美观的带颜色映射的气泡图
  • Java垃圾回收机制详解:从原理到实践
  • 数字规则:进制转换与原码、反码、补码
  • 第九天:java注解
  • Cesium快速入门到精通系列教程三:添加物体与3D建筑物
  • Flickr30k Entities短语定位评测指南
  • 进阶日记(一)大模型的本地部署与运行
  • MATLAB实战:人脸检测与识别实现方案
  • 并发执行问题 (上)