seaborn.relplot#

seaborn.relplot(data=None, *, x=None, y=None, hue=None, size=None, style=None, units=None, weights=None, row=None, col=None, col_wrap=None, row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=None, dashes=None, style_order=None, legend='auto', kind='scatter', height=5, aspect=1, facet_kws=None, **kwargs)#

在 FacetGrid 上绘制关系图的图级接口。

此函数提供对几个不同的轴级函数的访问,这些函数显示了两个变量之间的关系,并使用语义映射来识别子集。 kind 参数选择要使用的底层轴级函数

额外的关键字参数将传递给底层函数,因此您应该参考每个函数的文档以查看特定于类型的选项。

可以使用 huesizestyle 参数显示 xy 之间的关系,以用于数据的不同子集。这些参数控制使用哪些视觉语义来识别不同的子集。通过使用所有三种语义类型,可以独立地显示最多三个维度,但这种类型的绘图可能难以解释,并且通常无效。使用冗余语义(即对同一变量同时使用 huestyle)可以帮助使图形更易访问。

有关更多信息,请参阅 教程

如果存在 hue (以及在较小程度上,size)语义,则其默认处理方式取决于变量是否被推断为表示“数值”或“类别”数据。特别是,数值变量默认情况下使用连续色图表示,并且图例条目显示带有一定值(可能存在于数据中,也可能不存在)的常规“刻度”。可以通过各种参数控制此行为,如下所述和说明。

绘图后,将返回带有绘图的 FacetGrid,并且可以直接使用它来调整支持绘图的详细信息或添加其他图层。

参数::
datapandas.DataFramenumpy.ndarray、映射或序列

输入数据结构。可以分配给命名变量的向量集合(长格式),或者将在内部重新排列的宽格式数据集。

x, y向量或 data 中的键

指定 x 轴和 y 轴上位置的变量。

hue向量或 data 中的键

分组变量,将生成具有不同颜色的元素。可以是分类变量或数值变量,尽管在后一种情况下,颜色映射的行为会有所不同。

大小data 中的向量或键

分组变量,将产生不同大小的元素。可以是分类变量或数值变量,但大小映射在后一种情况下会有不同的行为。

样式data 中的向量或键

分组变量,将产生不同样式的元素。可以具有数值数据类型,但始终被视为分类变量。

单位data 中的向量或键

识别采样单位的分组变量。使用时,将为每个单位绘制单独的线,并具有相应的语义,但不会添加图例条目。在不需要确切标识时,可用于显示实验重复的分布。

权重data 中的向量或键

用于计算加权估计的数据值或列。请注意,使用权重当前将统计量选择限制为“均值”估计量和“ci”误差条。

行,列data 中的向量或键

定义在不同方面绘制子集的变量。

col_wrapint

将列变量“包裹”在该宽度,以便列方面跨越多行。与 row 方面不兼容。

row_order,col_order字符串列表

组织网格的行和/或列的顺序,否则顺序将从数据对象推断。

调色板字符串、列表、字典或 matplotlib.colors.Colormap

在映射 hue 语义时选择要使用的颜色方法。字符串值传递给 color_palette()。列表或字典值意味着分类映射,而颜色图对象意味着数值映射。

hue_order字符串向量

指定 hue 语义的分类级别的处理和绘制顺序。

hue_norm元组或 matplotlib.colors.Normalize

一对值,用于设置数据单位中的归一化范围,或者一个对象,将从数据单位映射到 [0, 1] 区间。用法意味着数值映射。

大小列表、字典或元组

确定在使用 size 时如何选择大小的对象。列表或字典参数应为每个唯一数据值提供一个大小,这将强制执行分类解释。参数也可以是最小值、最大值元组。

size_order列表

指定 size 变量级别的出现顺序,否则它们将从数据中确定。当 size 变量为数值时,这并不相关。

size_norm元组或 Normalize 对象

数据单位中的归一化,用于在 size 变量为数值时缩放绘图对象。

style_order列表

指定 style 变量级别的出现顺序,否则它们将从数据中确定。当 style 变量为数值时,这并不相关。

破折号布尔值、列表或字典

确定如何为 style 变量的不同级别绘制线条的对象。设置为 True 将使用默认破折号代码,或者您可以传递一个破折号代码列表或一个字典,将 style 变量的级别映射到破折号代码。设置为 False 将对所有子集使用实线。破折号的指定方式与 matplotlib 中相同:一个 (segment, gap) 长度元组,或一个空字符串以绘制实线。

标记布尔值、列表或字典

确定如何为 style 变量的不同级别绘制标记的对象。设置为 True 将使用默认标记,或者您可以传递一个标记列表或一个字典,将 style 变量的级别映射到标记。设置为 False 将绘制无标记的线条。标记的指定方式与 matplotlib 中相同。

图例“auto”、”brief”、”full” 或 False

如何绘制图例。如果为“brief”,数值 huesize 变量将用等距值的样本表示。如果为“full”,每个组都将在图例中获得一个条目。如果为“auto”,将根据级别的数量选择“brief”或“full”表示。如果为 False,则不会添加图例数据,也不会绘制图例。

种类字符串

要绘制的绘图类型,对应于 seaborn 关系绘图。选项是 "scatter""line"

高度标量

每个方面的(英寸)高度。另请参见:aspect

纵横比标量

每个方面的纵横比,因此 aspect * height 以英寸为单位给出每个方面的宽度。

facet_kws字典

要传递给 FacetGrid 的其他关键字参数的字典。

kwargs键值对

其他关键字参数将传递给基础绘图函数。

返回值::
FacetGrid

管理一个或多个子图的对象,这些子图对应于条件数据子集,并具有方便的方法用于批处理设置轴属性。

示例

这些示例将仅说明 relplot() 能够实现的功能的一部分。有关更多信息,请咨询 scatterplot()lineplot() 的示例,这些示例分别在 kind="scatter"kind="line" 时使用。

为了说明 kind="scatter"(默认绘图样式),我们将使用“tips”数据集

tips = sns.load_dataset("tips")
tips.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4

分配 xy 以及任何语义映射变量将绘制单个绘图

sns.relplot(data=tips, x="total_bill", y="tip", hue="day")
../_images/relplot_4_0.png

分配 col 变量将在网格的列中排列多个子图,创建一个分面图形

sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time")
../_images/relplot_6_0.png

不同的变量可以分配给列和行的方面

sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time", row="sex")
../_images/relplot_8_0.png

当分配给 col 的变量具有许多级别时,它可以“包裹”在多行中

sns.relplot(data=tips, x="total_bill", y="tip", hue="time", col="day", col_wrap=2)
../_images/relplot_10_0.png

分配多个语义变量可以显示多维关系,但要注意避免制作过于复杂的绘图。

sns.relplot(
    data=tips, x="total_bill", y="tip", col="time",
    hue="time", size="size", style="sex",
    palette=["b", "r"], sizes=(10, 100)
)
../_images/relplot_12_0.png

当某个变量存在自然的连续性时,显示线而不是点更有意义。要使用 lineplot() 绘制图形,请设置 kind="line"。我们将用“fmri”数据集说明这种效果

fmri = sns.load_dataset("fmri")
fmri.head()
subject timepoint event region signal
0 s13 18 stim parietal -0.017552
1 s5 14 stim parietal -0.080883
2 s12 18 stim parietal -0.081033
3 s11 18 stim parietal -0.046134
4 s10 18 stim parietal -0.037970

使用 kind="line" 提供与 kind="scatter" 相同的语义映射灵活性,但 lineplot() 在绘制之前对数据进行更多转换。观察结果按其 x 值排序,重复观察结果被聚合。默认情况下,结果绘图显示每个单位的均值和 95% CI

sns.relplot(
    data=fmri, x="timepoint", y="signal", col="region",
    hue="event", style="event", kind="line",
)
../_images/relplot_16_0.png

图形的大小和形状由每个单个方面的 heightaspect 比例参数化

sns.relplot(
    data=fmri,
    x="timepoint", y="signal",
    hue="event", style="event", col="region",
    height=4, aspect=.7, kind="line"
)
../_images/relplot_18_0.png

relplot() 返回的对象始终是 FacetGrid,它有几种方法可以让你快速调整标题、标签和绘图的其他方面

g = sns.relplot(
    data=fmri,
    x="timepoint", y="signal",
    hue="event", style="event", col="region",
    height=4, aspect=.7, kind="line"
)
(g.map(plt.axhline, y=0, color=".7", dashes=(2, 1), zorder=0)
  .set_axis_labels("Timepoint", "Percent signal change")
  .set_titles("Region: {col_name} cortex")
  .tight_layout(w_pad=0))
../_images/relplot_20_0.png

也可以使用宽格式数据和 relplot()

flights_wide = (
    sns.load_dataset("flights")
    .pivot(index="year", columns="month", values="passengers")
)

在这种情况下,分面不是一个选项,但绘图仍然会利用 FacetGrid 提供的外部图例

sns.relplot(data=flights_wide, kind="line")
../_images/relplot_24_0.png