当前位置: 首页 > 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()

在这里插入图片描述

相关文章:

  • 【大模型学习】项目练习:视频文本生成器
  • 【端午安康】龙舟争渡Plug-In
  • sqlite-vec:谁说SQLite不是向量数据库?
  • Mysql备份
  • 基于 Alpine 定制单功能用途(kiosk)电脑
  • 苹果电脑深度清理,让老旧Mac重焕新生
  • ios tableview吸顶
  • 【机器学习基础】机器学习入门核心算法:多分类与多标签分类算法
  • 深入探讨redis:缓存
  • 【Part 3 Unity VR眼镜端播放器开发与优化】第二节|VR眼镜端的开发适配与交互设计
  • World of Warcraft Hunter [Grandel] [Ancient Petrified Leaf]
  • C++ 标准输入输出 -- <iostream>
  • 开源的JT1078转GB28181服务器
  • API 版本控制:使用 ABP vNext 实现版本化 API 系统
  • Arch安装megaton
  • 湖北理元理律所:企业债务重组中的“法律缓冲带”设计
  • 服务器间文件传输
  • 好用的C/C++/嵌入式 IDE: CLion的下载安装教程(保姆级教程)
  • Python----目标检测(《YOLOv3:AnIncrementalImprovement》和YOLO-V3的原理与网络结构)
  • 5.RV1126-OPENCV 图形计算面积
  • 云南网络宣传公司/谷歌seo优化
  • 寄生虫做网站流量/百度网页pc版登录
  • 网站建设属于硬件还是软件/最大的中文搜索引擎
  • 营销网站建设制作设计/常见的搜索引擎有哪些?
  • 武汉做企业网站的公司/我想做电商
  • 上海网站建设的网/如何进行网络营销推广