Seaborn 子图

Manav Narula 2024年2月15日
  1. 在 Python 中使用 matplotlib.pyplot.subplots 函数绘制 Seaborn 子图
  2. 在 Python 中使用 matplotlib.pyploy.add_subplot() 函数绘制 Seaborn 子图
Seaborn 子图

在本教程中,我们将学习如何在 Python 中绘制 seaborn 子图。

在 Python 中使用 matplotlib.pyplot.subplots 函数绘制 Seaborn 子图

我们知道大多数 seaborn 图返回一个 matplotlib 轴对象。所以我们可以使用 subplots() 函数来绘制子图。

首先,我们将使用此函数创建所需的图形并为整个子图创建网格。然后我们将继续绘制必要的图形。

下面的代码将解释这一点。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

fig, axes = plt.subplots(1, 2)

seaborn 子图

使用上面截取的代码,我们能够将最终图形划分为 1x2 子图。返回的轴对象是指定大小的 numpy 数组,在我们的示例中为 1x2。我们将在绘制子图时使用这个对象。我们将使用 seaborn 绘图函数中的 ax 参数指定子图所需的位置。

请参考下面的代码片段。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


df = pd.DataFrame(
    {
        "Price 1": [7, 1, 5, 6, 3, 10, 5, 8],
        "Price 2": [1, 2, 8, 4, 3, 9, 5, 2],
        "Day": [1, 2, 3, 4, 5, 6, 7, 8],
    }
)


fig, axes = plt.subplots(1, 2)

sns.lineplot(x="Day", y="Price 1", data=df, ax=axes[0])
sns.lineplot(x="Day", y="Price 2", data=df, ax=axes[1])
axes[0].set_title("First")
axes[1].set_title("Second")
plt.suptitle("Main")

seaborn 子图

我们可以使用轴对象为单个绘图添加自定义,例如添加标题和所有内容。请注意,我们使用 suptitle() 函数为主图添加标题。

在 Python 中使用 matplotlib.pyploy.add_subplot() 函数绘制 Seaborn 子图

与之前的方法不同,此函数可用于动态创建子图。在我们的示例中,我们将使用 for 循环创建带有子图的 axes 对象。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(
    {
        "Price 1": [7, 1, 5, 6, 3, 10, 5, 8],
        "Price 2": [1, 2, 8, 4, 3, 9, 5, 2],
        "Day": [1, 2, 3, 4, 5, 6, 7, 8],
    }
)

fig = plt.figure()

for i in range(1, 3):
    axes = fig.add_subplot(1, 2, i)
    if i == 1:
        sns.lineplot(x="Day", y="Price 1", data=df)
    else:
        sns.lineplot(x="Day", y="Price 2", data=df)

seaborn 子图

我们为我们的图创建了一个 1x2 的子图。i 参数用于单独访问图。我们也会在绘图时使用它。我们可以使用 subplots_adjust() 函数来调整最终图形中的间距和所有内容。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn