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

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

一、创建子图

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

import matplotlib.pyplot as plt

fig, 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 plt

fig, axs = plt.subplots(2, 2)
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])


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

import matplotlib.pyplot as plt

fig, 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 plt

fig, axs = plt.subplots(2, 2, figsize=(4, 4))


五、子图间距

5.1 子图代码调整

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

import matplotlib.pyplot as plt

fig, 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 plt

fig = 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)

# 显示图形
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/e53c071b7684a7107df7158dae7cf967.png)

 

![img](https://img-blog.csdnimg.cn/img_convert/16307fc2f0221920f627ad82de96d5ae.png)

![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)

![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐