python数据可视化玩转Matplotlib subplot子图操作,四个子图(一包四),三个子图,子图拉伸

article/2025/9/22 10:21:22

目录

一、创建子图

1.1 下图是绘制的子图:

1.2 代码释义:

二、绘制子图

2.1 代码引入

2.2 图形绘制

三、子图布局

3.1 子图布局说明

四、子图大小

4.1 子图大小调整

五、子图间距

5.1 子图代码调整

六、子图位置

6.1 代码引入

6.2 完整代码

6.3 完整代码

总结




大锤爱编程的博客_CSDN博客-大数据,Go,数据分析领域博主

Matplotlib是一个流行的Python可视化库,它提供了许多功能来创建各种类型的图表。其中一个功能是子图,它允许您在单个图表中绘制多个图。

一、创建子图

要创建子图,请使用plt.subplots()函数。该函数接受三个参数:行数、列数和子图编号。以下是一个简单的示例:

import matplotlib.pyplot as pltfig, axs = plt.subplots(2, 2)

这将创建一个2x2的网格,其中包含4个子图。每个子图都有一个唯一的编号,可以在axs数组中访问。例如,要访问第一个子图,请使用axs[0, 0]

以下是一个示例代码,用于绘制2x2网格,其中每个子图都随机放置一个图形:

import matplotlib.pyplot as plt
import numpy as np# 创建一个2x2的网格
fig, axs = plt.subplots(2, 2)# 在每个子图中绘制一个图形
for ax in axs.flat:# 随机生成一些数据x = np.random.rand(100)y = np.random.rand(100)# 绘制散点图ax.scatter(x, y)# 显示图形
plt.show()

1.1 下图是绘制的子图:

1.2 代码释义:

注释:

  • 导入必要的库:我们需要使用matplotlib和numpy库来生成散点图和随机数。
  • 创建一个2x2的网格:我们使用subplot()函数创建一个2x2的子图,该函数返回一个Figure对象fig和一个Axes对象数组axs,它包含四个子图,第一个参数2表示行数,第二个参数2表示列数。
  • 在每个子图中绘制一个图形:我们使用for循环遍历每个子图对象,对每个子图生成随机数据,使用scatter()函数在子图中绘制散点图。使用axs.flat将axs数组展平为一维,这样可以方便地遍历每个子图。
  • 随机生成一些数据:我们使用numpy库中的random模块来生成100个在[0,1)内的随机数作为横坐标和纵坐标。
  • 绘制散点图:我们使用子图对象ax的scatter()函数来绘制散点图,该函数接受横坐标和纵坐标作为参数,将它们绘制成散点图。
  • 显示图形:最后,我们调用plt.show()函数来显示所有子图。这将打开一个窗口,其中包含四个散点图子图。

二、绘制子图

2.1 代码引入

绘制子图与绘制普通图形非常相似。您可以使用子图的Axes对象上的任何Matplotlib绘图函数。例如,以下代码将在第一个子图中绘制一条线:

import matplotlib.pyplot as pltfig, axs = plt.subplots(2, 2)
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])

要在所有子图中绘制相同的图形,请使用循环。以下代码将在所有子图中绘制一条线:

import matplotlib.pyplot as pltfig, axs = plt.subplots(2, 2)
for ax in axs.flat:ax.plot([1, 2, 3, 4], [1, 4, 2, 3])

2.2 图形绘制

下面是绘制的子图:

三、子图布局

3.1 子图布局说明

默认情况下,plt.subplots()函数将子图放置在网格中,每个子图的大小相同。但是,您可以使用各种选项来更改子图的大小和位置。

四、子图大小

4.1 子图大小调整

要更改子图的大小,请使用figsize参数。以下代码将创建一个2x2的网格,其中每个子图的大小为4x4英寸:

import matplotlib.pyplot as pltfig, axs = plt.subplots(2, 2, figsize=(4, 4))

五、子图间距

5.1 子图代码调整

要更改子图之间的间距,请使用wspacehspace参数。这些参数控制子图之间的水平和垂直间距,以及子图与图表边缘的距离。以下代码将创建一个2x2的网格,其中每个子图的水平和垂直间距为0.5英寸:

import matplotlib.pyplot as pltfig, axs = plt.subplots(2, 2, figsize=(4, 4), wspace=0.5, hspace=0.5)

六、子图位置

6.1 代码引入

默认情况下,子图将放置在网格中,但您也可以使用GridSpec对象来更改子图的位置。以下代码将创建一个网格,其中第一个子图占据整个第一行,而第二个子图占据第一行的后两列:

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as pltfig = plt.figure()
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 2])
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1:])

6.2 完整代码

以下是一个完整的Python代码,演示如何使用GridSpec对象来更改子图的位置。该代码将创建一个2x2的网格,其中第一个子图占据整个第一行,而第二个子图占据第一行的后两列。

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
import numpy as np# 创建一个2x2的网格,第一个子图占据整个第一行,第二个子图占据第一行的后两列
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 2])
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, 0])
ax3 = plt.subplot(gs[1, 1])# 在第一个子图中绘制一个折线图
x = np.linspace(0, 10, 100)
y = np.sin(x)
ax1.plot(x, y)# 在第二个子图中绘制一个散点图
x = np.random.rand(100)
y = np.random.rand(100)
ax2.scatter(x, y)# 在第三个子图中绘制一个柱状图
x = ['A', 'B', 'C', 'D']
y = [3, 7, 1, 9]
ax3.bar(x, y)# 显示图形
plt.show()

下面是绘制的子图:

6.3 完整代码

示例1:使用GridSpec对象创建自定义子图布局

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspecfig = plt.figure()# 定义网格
gs = gridspec.GridSpec(3, 3)# 创建子图1
ax1 = fig.add_subplot(gs[0, :])
ax1.set_title('Subplot 1')# 创建子图2
ax2 = fig.add_subplot(gs[1, :2])
ax2.set_title('Subplot 2')# 创建子图3
ax3 = fig.add_subplot(gs[1:, 2])
ax3.set_title('Subplot 3')# 创建子图4
ax4 = fig.add_subplot(gs[2, :2])
ax4.set_title('Subplot 4')# 添加图形
fig.tight_layout()
plt.show()

绘制出来的图片如下,可以看出来,符合实际需求。

总结

子图是Matplotlib中强大的功能之一。使用plt.subplots()函数,您可以方便地创建多个子图,并使用Axes对象绘制各种图形。使用各种选项,例如figsizewspacehspace参数,以及GridSpec对象,可以更改子图的大小、位置和间距。


http://chatgpt.dhexx.cn/article/x0n1IlZ1.shtml

相关文章

极大连通子图与极小连通子图(带图讲解)

因为本人对于这一块知识存在疑惑,在学习了相关知识后将自己的理解分享给大家,如有错误,欢迎纠正。 首先我们先明确一下,极小连通子图与极大连通子图是在无向图中进行讨论的。 极大强连通子图是在有向图中进行讨论的,不…

Python 调整子图大小、位置【plt.axes()自定义子图】

效果图: plt.axes()绘图结果 上图一共三个子图,两个横向子图对齐右侧纵向长图。 本来想用plt.subplot()函数画,结果找了半天都是下图这种结果: 只能合并列,不能合并行 plt.subplot()绘图结果 因此,我放…

子图的概念

设G(V,E)为一个图,H(V’,E’)也是一个 图,称H为G的一个子图(subgraph),如果 ,并且对任意的边euv∈E’必须有u,v∈V’,记为 , 此时也称G为H的母图(super graph). 设H(V’,E’)为G(V,E)的一个子图,称H为G的生成(支撑)子图(spanning subgraph),如果V’V. 设G(V,E)是一个图,,构造一…

最大完全子图和极大连通子图

最近学习图论的一串小结之一 完全图&完全子图&最大完全子图 完全图:任意两点都恰有一条边相连的图(任意两点都相邻)。 完全子图:满足任意两点都恰有一条边相连的子图,也叫团。 最大完全子图:所有完全子图中顶点数最大…

子图,生成子图和导出子图

所有的顶点和边都属于图G的图称为G的子图。含有G的所有顶点的子图称为G的生成子图。 设V1是V的一个非空子集,以V1为顶点集,以两端点均在V1中的边的全体为边集的子图称为G的导出子图,记作G[V1]。导出子图G[V\V1]记为G-V1,它是从G中…

子图、生成子图、导出子图和主子图

所有的顶点和边都属于图G的图称为G的子图。含有G的所有顶点的子图称为G的生成子图。 设V1是V的一个非空子集,以V1为顶点集,以两端点均在V1中的边的全体为边集的子图称为G的导出子图,记作G[V1]。导出子图G[V\V1]记为G-V1,它是从…

子图,生成子图(Spanning Subgraph),导出子图(Induced Subgraph)的定义

首先给出一些定义。原图G用G (V, E)表示,V是G中的所有顶点的集合;E是G中所有边的集合。 子图 定义:子图G’中所有的顶点和边均包含于原图G。即E’∈E,并且V’∈V。 生成子图(Spanning Subgraph) 定义&…

图论中的概念(1)——子图、商图与补图

1.子图(subgraph) 设G(V, E)和G¢(V¢, E¢)是两个(有向的或无向的)图。 (1) 若V¢V且E¢ E,则称G¢为G的子图; (2) 若V¢V且 E¢ E,则称G¢为G的真子图(proper-); (3) 若V¢V且E…

图的基本概念

图的基本概念 一个图 G 它可以由顶点集(图 G 中顶点的有限非空集) V 和边集(图 G 中顶点之间的关系集合) E 所组成。图中顶点个数也可以称为图的阶;任何一条边的两头必须连接某一个顶点。图不可以是空,即顶…

图论(3)子图,图运算,路与连通性

目录 一、子图相关概念 1.子图概念 2.点导出子图与边导出子图 点导出子图 边导出子图 3.图的生成子图 二、图运算 1.图的删点、删边运算 删点运算 删边运算 2.图的并运算 3.图的交运算 4.图的差运算 5.图的对称差运算或环和运算 6.图的联运算 7.图的积图 8.图…

数据可视化——子图的绘制及坐标轴共享

一、绘制固定区域的子图 matplotlib可以将整个画布规划成等分布的m*n(行 x 列)的矩阵区域,并对每个区域进行编号。 1.1、绘制单子图 使用pyplot()函数的subplot()可以在规划好的某个区域中绘制单个子图。 语法格式如下: subplo…

子图

前言 子图是指说绘制的图形是有多个图形组成的,通过子图能否进行数据的不同比较。其主要是通过subplot方法实现的。 其中有规范划分和不规则划分。 subplot(numRows, numCols, plotNum) numRows:子图总行数 numCols:子图总列数 plotNum:子图编号(从左到右&#xf…

Matplotlib(二)—— 子图

Python模块 —— Matplotlib Matplotlib(二)—— 子图四、子图4.1 均匀子图4.1.1 plt.subplots4.1.2 plt.subplot 4.2 非均匀子图4.2.1 fig.add_gridspec 4.3 子图上的方法4.4 墨尔本温度数据集4.5 画出数据的散点图和边际分布图 Matplotlib(…

物联网和海计算有什么关系,主要具有哪些优点?

物联网和海计算 海计算通过在物理世界的物体中融入计算与通信设备以及智能算法,让物物之间能够互连,在事先无法预知的场景中进行判断,实现物物之间的交互作用。海计算一方面通过强化融入在各物体中的信息装置,实现物体与信息装置…

再谈智能

1. 智能的产生 1.1 智能生成机理 有关智能生成的机理,一直是许多领域关注的焦点问题,涉及面之广、深很是少见,初步梳理可能会与这样几个最基本的问题有关:认知生成的机理、知识生成的机理、意义生成的机理、情感生成的机理、…

神码ai人工智能写作机器人_神经符号AI为我们提供具有真正常识的机器

神码ai人工智能写作机器人 By Katia Moskvitch 卡蒂亚莫斯科维奇(Katia Moskvitch) “那只狗躲在床底下。 再次。” (“The dog hid under the bed. Again.”) At any other time, IBM computer scientist Danny Gutfreund, then at IBM’s Haifa lab in Israel, would’ve pr…

关于人机智能的一点思考

0.小序 人智的“是”离不开非(不是),机智的“是”离开了非(不是)。真正的自主不是自己去决定什么,而是在随机中应变,在变化的人机环境系统中动态而又恰当地决定什么。自主不是自己去决定&#x…

基于知识图谱的智能问答

基于知识图谱的相关应用大致可以分为搜索、问答、决策、推荐等几种常见的类别,对于知识图谱的理解,可以参考之前的文章《三个角度理解知识图谱》,本文主要就年初规划的xx智能问答建设方案,介绍一下基于知识图谱的智能问答&#xf…

Python相关的人工智能库

移动互联网取代PC互联网领跑在互联网时代的最前沿,Android和iOS一度成为移动互联网应用平台的两大霸主,成为移动开发者首选的两门技术,HTML5以其跨平台的优势在移动互联网应用平台占据重要位置,可以说是后来者居上。 由于技术的限…

基于知识图谱的智能问答方案

向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 三个角度理解知识图谱 2012年谷歌首次提出“知识图谱”这个词,由此知识图谱在工业界也出现得越来越多,对于知识图谱以及相关概念的理解确实也是…