热烈Matplotlib子图不不会画来看看-分图绘制(怒肝万字)

本文介绍了如何使用matplotlib的plt.subplots()函数创建和定制子图,包括如何设置子图的大小、间距和位置。示例代码展示了如何绘制四格散点图,以及如何通过GridSpec对象实现自定义布局。文章强调了子图在数据可视化中的重要性,并提供了实用的编程技巧。

👨🏻‍🎓博主介绍:大家好,我是大锤爱编程的博客_优快云博客-大数据,Go,数据分析领域博主,有五年的数据开开发,有着丰富的数仓搭建、数据分析经验。我会在我的系列文章里面分享我学到的知识,希望能够帮助到大家🌟
🌈擅长领域:大数据、数据分析
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!

为啥要创建子图:

通常学习的时候,看到别人的子图,一个里面并着好几个,感觉很专业。我就认真研究了,如何使用matplot绘制子图。

四格散点图

 

上一下二图

 

上一下三图

 

完整代码含运行案例

创建子图

要创建子图,请使用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()

下图是绘制的子图:

绘制子图

绘制子图与绘制普通图形非常相似。您可以使用子图的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])

下面是绘制的子图:

子图布局

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

子图大小

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

import matplotlib.pyplot as plt

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

子图间距

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

import matplotlib.pyplot as plt

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

子图位置

默认情况下,子图将放置在网格中,但您也可以使用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:])

以下是一个完整的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()

下面是绘制的子图:

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

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

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

示例2:在同一图表中绘制多个图形

import matplotlib.pyplot as plt
import numpy as np

# 创建一个新的图形
fig = plt.figure()

# 创建一个子图
ax = fig.add_subplot(111)

# 绘制第一个图形
x = np.linspace(0, 10, 100)
y = np.sin(x)
ax.plot(x, y)

# 绘制第二个图形
x = np.linspace(0, 10, 100)
y = np.cos(x)
ax.plot(x, y)

# 显示图形
plt.show()

示例3:使用subplots()函数创建多个子图

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()

总结

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

在使用 `matplotlib` 绘制时,有多种方法可以实现对布和的控制。以下是几种常见且灵活的方式: ### 使用 `add_subplot` 方法 这种方法适用于逐步添加的情况,特别适合在已有的布上增加新的。 ```python import matplotlib.pyplot as plt fig = plt.figure() # 定义布 ax1 = fig.add_subplot(111) # 添加第一个 ax1.plot([1, 2, 3]) ax2 = fig.add_subplot(221, facecolor='y') # 添加第二个,并设置背景颜色 ax2.plot([1, 2, 3]) ``` ### 使用 `subplots` 函数 当在绘制前已经知道需要多少个时,可以使用 `subplots` 函数来一次性创建所有。 ```python import matplotlib.pyplot as plt # 创建一个包含多个表,使用subplots函数定义布局 fig, axs = plt.subplots(2, 2) # 2行2列的布局 # 别在每个中绘 axs[0, 0].plot([1, 2, 3], [4, 5, 1]) axs[0, 0].set_title('First Subplot') axs[0, 1].plot([1, 2, 3], [1, 5, 4]) axs[0, 1].set_title('Second Subplot') axs[1, 0].plot([1, 2, 3], [2, 5, 3]) axs[1, 0].set_title('Third Subplot') axs[1, 1].plot([1, 2, 3], [3, 5, 2]) axs[1, 1].set_title('Fourth Subplot') # 调整之间的距离 plt.tight_layout() # 显示形 plt.show() ``` ### 使用 `gridspec` 模块 对于更复杂的布局需求,`gridspec` 提供了更加灵活的方式来定义的位置和大小。 ```python import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np # 创建示例数据 x = np.linspace(0, 2 * np.pi, 100) y1 = np.sin(x) y2 = np.cos(x) y3 = np.tan(x) # 创建一个包含多个表,使用gridspec定义布局 fig = plt.figure(figsize=(10, 4)) gs = gridspec.GridSpec(1, 3) # 1行3列的布局 # 第一个 ax1 = plt.subplot(gs[0, 0]) ax1.plot(x, y1, label='Sine Function', color='blue') ax1.set_title('Sine Function') ax1.legend() # 第二个 ax2 = plt.subplot(gs[0, 1]) ax2.plot(x, y2, label='Cosine Function', color='red') ax2.set_title('Cosine Function') ax2.legend() # 第三个 ax3 = plt.subplot(gs[0, 2]) ax3.plot(x, y3, label='Tangent Function', color='green') ax3.set_title('Tangent Function') ax3.legend() # 调整之间的距离 plt.tight_layout() # 显示形 plt.show() ``` 以上方法展示了如何利用 `matplotlib` 的同功能来创建和管理,无论是简单的还是复杂的布局都能得到很好的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锤爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值