通过循环和函数填充 Matplotlib subplot

通过循环和函数填充 Matplotlib subplot

Matplotlib 是 Python 中最流行的绘图库之一。它为我们提供了各种绘图类型和展示数据的方式。当处理大量数据集时,我们通常需要把它们放在一起进行比较,而 Matplotlib 提供的子图功能可以帮助我们轻松实现这一点。本文将介绍如何通过循环和函数填充 Matplotlib subplot。

Matplotlib subplot 简介

subplot 是 Matplotlib 中用于绘制多个图表的函数,它允许我们将多个图表组合在同一个图像上。每个子图都有自己的坐标系,我们可以在每个子图中绘制不同的数据并进行比较。Matplotlib 的 subplot 函数使用方法如下:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2, ncols=2)
ax[0, 0].plot([1, 2, 3], [4, 5, 6])
ax[0, 1].scatter([1, 2, 3], [4, 5, 6])
ax[1, 0].hist([1, 2, 3])
ax[1, 1].bar([1, 2, 3], [4, 5, 6])
plt.show()

上述代码使用两行两列的布局将四个子图分别绘制在 Matplotlib 图像的不同区域中。每个子图可以使用不同的数据进行绘制,并且可以使用不同的绘图函数进行添加。该代码使用 plotscatterhistbar 分别绘制了四个子图。

通过循环创建 subplot

在上述示例中,我们手动添加了四个子图到 Matplotlib 图像中。但是,当需要处理大量数据集的时候,手动添加每个子图可能会非常困难。因此,可以通过循环来快速创建和填充多个子图。

假设我们有一个数据集,里面包含了不同城市的每位居民的身高和体重。我们可以使用 Matplotlib 的 subplot 来创建多个图表,来比较身高和体重之间的关系。以下是用循环创建 subplot 的代码示例:

import matplotlib.pyplot as plt
import numpy as np

data = {"city1": {"height": np.random.normal(170, 5, 100), "weight": np.random.normal(65, 10, 100)},
        "city2": {"height": np.random.normal(165, 7, 100), "weight": np.random.normal(70, 12, 100)},
        "city3": {"height": np.random.normal(175, 6, 100), "weight": np.random.normal(67, 8, 100)},
        "city4": {"height": np.random.normal(168, 4, 100), "weight": np.random.normal(73, 11, 100)}}

fig, ax = plt.subplots(nrows=2, ncols=2)
for i, city in enumerate(data.keys()):
    row = i // 2   # 行
    col = i % 2    # 列
    ax[row, col].scatter(data[city]["height"], data[city]["weight"])
    ax[row, col].set_title(city)
plt.show()

在上述示例代码中,我们使用了 enumerate 来迭代数据源。由于我们想要绘制四个子图,因此 nrowsncols 都为 2。我们使用了取整操作来确定每个子图的行和列。最后,我们使用 scatter 绘制散点图并在每个子图上设置一个标题。

通过函数创建 subplot

我们还可以通过函数来创建和填充 subplot。这种方法特别适用于需要绘制多个与数据集相关的图表的情况。我们可以使用函数来将复杂的数据转换为图表,并在每个子图中绘制。以下是使用函数创建 subplot 的代码示例:

import matplotlib.pyplot as plt
import numpy as np

data = {"city1": {"height": np.random.normal(170, 5, 100), "weight": np.random.normal(65, 10, 100)},
        "city2": {"height": np.random.normal(165, 7, 100), "weight": np.random.normal(70, 12, 100)},
        "city3": {"height": np.random.normal(175, 6, 100), "weight": np.random.normal(67, 8, 100)},
        "city4": {"height": np.random.normal(168, 4, 100), "weight": np.random.normal(73, 11, 100)}}

def plot_data(ax, city, data):
    ax.scatter(data[city]["height"], data[city]["weight"])
    ax.set_title(city)

fig, ax = plt.subplots(nrows=2, ncols=2)
for i, city in enumerate(data.keys()):
    row = i // 2
    col = i % 2
    plot_data(ax[row, col], city, data)
plt.show()

在上述示例代码中,我们定义了一个名为 plot_data 的函数,该函数接受三个参数:子图对象、数据源中的城市名称和数据本身。该函数使用 scatter 绘制散点图,并在子图上设置标题。最后,我们在循环内部使用该函数来填充子图,并创建 Matplotlib 图像。

结论

在本文中,我们介绍了如何使用循环和函数来填充 Matplotlib subplot。通过这种方式,我们可以快速创建具有多个子图的图像,并轻松地比较不同的数据集。无论您是处理小型还是大型数据集,这种方法都可以帮助您更轻松地可视化数据。祝您使用愉快!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程