seaborn.swarmplot#

seaborn.swarmplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor=None, linewidth=0, hue_norm=None, log_scale=None, native_scale=False, formatter=None, legend='auto', warn_thresh=0.05, ax=None, **kwargs)#

绘制一个分类散点图,其中点被调整为非重叠。

此函数类似于 stripplot(),但点被调整(仅沿分类轴)以避免重叠。这更好地表示了值的分布,但它不能很好地扩展到大规模的观察数据。这种类型的绘图有时被称为“蜂群图”。

蜂群图可以单独绘制,但它也是盒形图或小提琴图的良好补充,在您希望显示所有观察值以及一些对潜在分布的表示的情况下。

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

注意

默认情况下,此函数将一个变量视为分类变量,并在相关轴上的序数位置(0、1、… n)处绘制数据。从版本 0.13.0 开始,可以通过设置 native_scale=True 来禁用此功能。

参数:
dataDataFrame、Series、dict、数组或数组列表

用于绘图的数据集。如果 xy 缺失,则解释为宽格式。否则,它应该为长格式。

x, y, hue data 中变量的名称或矢量数据

用于绘制长格式数据的输入。请参阅示例以了解解释。

order, hue_order字符串列表

用于绘制分类级别的顺序;否则,从数据对象中推断级别。

dodge布尔值

当分配了 hue 变量时,将其设置为 True 将在分类轴上分离不同色调级别的蜂群,并缩小分配给每个条带的空间量。否则,每个级别的点将绘制在同一个蜂群中。

orient“v” | “h” | “x” | “y”

绘图的方向(垂直或水平)。这通常根据输入变量的类型推断,但当 xy 均为数字或绘制宽格式数据时,可以使用它来解决歧义。

版本 v0.13.0 中的变更: 添加了 'x'/'y' 作为选项,分别相当于 'v'/'h'。

colormatplotlib 颜色

绘图中元素的单一颜色。

palette调色板名称、列表或字典

用于 hue 变量的不同级别的颜色。应该是可以被 color_palette() 解释的内容,或是一个字典,将色调级别映射到 matplotlib 颜色。

size浮点数

标记的半径,以点为单位。

edgecolormatplotlib 颜色,“gray” 为特殊情况

每个点周围线条的颜色。如果您传递 "gray",则亮度由用于点主体颜色调色板决定。

linewidth浮点数

围绕绘图元素的线条的宽度。

log_scale布尔值或数字,或布尔值或数字对

将轴刻度设置为对数。单个值设置绘图中任何数字轴的数据轴。一对值独立设置每个轴。数字值被解释为所需的底数(默认为 10)。当为 NoneFalse 时,seaborn 将使用现有 Axes 刻度。

版本 v0.13.0 中的新功能。

native_scale布尔值

当为 True 时,分类轴上的数字或日期时间值将保留其原始缩放比例,而不是转换为固定索引。

版本 v0.13.0 中的新功能。

formatter可调用对象

用于将分类数据转换为字符串的函数。影响分组和刻度标签。

版本 v0.13.0 中的新功能。

legend“auto”、”brief”、”full” 或 False

如何绘制图例。如果为“brief”,则将使用均匀间隔值的样本表示数值 huesize 变量。如果为“full”,则每个组将在图例中获得一个条目。如果为“auto”,则根据级别数量选择简要或完整表示。如果为 False,则不会添加任何图例数据,也不会绘制任何图例。

版本 v0.13.0 中的新功能。

axmatplotlib Axes

要绘制图形的 Axes 对象,否则使用当前 Axes。

kwargs键值映射

其他关键字参数将传递给 matplotlib.axes.Axes.scatter()

返回值:
axmatplotlib Axes

返回绘制图形的 Axes 对象。

另请参阅

boxplot

具有类似 API 的传统箱线图。

violinplot

箱线图和核密度估计的组合。

stripplot

一个散点图,其中一个变量是分类的。可以与其他绘图一起使用以显示每个观察结果。

catplot

将分类图与 FacetGrid 相结合。

示例

分配单个数值变量将显示其单变量分布,其中点沿另一个轴调整,以使它们不重叠

tips = sns.load_dataset("tips")
sns.swarmplot(data=tips, x="total_bill")
../_images/swarmplot_1_0.png

分配第二个变量将拆分点组以比较该变量的分类级别

sns.swarmplot(data=tips, x="total_bill", y="day")
../_images/swarmplot_3_0.png

通过交换分类变量和数值变量的分配,显示垂直方向的蜂群

sns.swarmplot(data=tips, x="day", y="total_bill")
../_images/swarmplot_5_0.png

在 0.12 版之前,分类变量的级别默认具有不同的颜色。要获得相同的效果,请明确分配 hue 变量

sns.swarmplot(data=tips, x="total_bill", y="day", hue="day", legend=False)
../_images/swarmplot_7_0.png

或者,您可以将一个不同的变量分配给 hue 以显示多维关系

sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex")
../_images/swarmplot_9_0.png

如果 hue 变量是数值型的,则默认情况下它将使用定量调色板进行映射(请注意,在 0.12 版之前并非如此)

sns.swarmplot(data=tips, x="total_bill", y="day", hue="size")
../_images/swarmplot_11_0.png

使用 palette 来控制颜色映射,包括通过传递定性调色板的名称来强制进行分类映射

sns.swarmplot(data=tips, x="total_bill", y="day", hue="size", palette="deep")
../_images/swarmplot_13_0.png

默认情况下,hue 变量的不同级别在每个蜂群中相互交织,但设置 dodge=True 将拆分它们

sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex", dodge=True)
../_images/swarmplot_15_0.png

绘图的“方向”(定义为保留定量关系的方向)通常会自动推断。但在模棱两可的情况下,例如当两个轴变量都是数值型时,可以指定它

sns.swarmplot(data=tips, x="total_bill", y="size", orient="h")
/Users/mwaskom/code/seaborn/seaborn/categorical.py:3399: UserWarning: 15.4% of the points cannot be placed; you may want to decrease the size of the markers or use stripplot.
  warnings.warn(msg, UserWarning)
/Users/mwaskom/code/seaborn/seaborn/categorical.py:3399: UserWarning: 17.3% of the points cannot be placed; you may want to decrease the size of the markers or use stripplot.
  warnings.warn(msg, UserWarning)
../_images/swarmplot_17_1.png

当点的局部密度过高时,它们将被迫重叠在每个蜂群的“沟槽”中,并会发出警告。减小点的大小有助于避免此问题

sns.swarmplot(data=tips, x="total_bill", y="size", orient="h", size=3)
../_images/swarmplot_19_0.png

默认情况下,分类变量将映射到具有固定比例 (0, 1, …) 的离散索引,即使它本身是数值型的

sns.swarmplot(
    data=tips.query("size in [2, 3, 5]"),
    x="total_bill", y="size", orient="h",
)
../_images/swarmplot_21_0.png

要禁用此行为并使用变量的原始比例,请设置 native_scale=True(注意,这也改变了 y 轴上变量的顺序)

sns.swarmplot(
    data=tips.query("size in [2, 3, 5]"),
    x="total_bill", y="size", orient="h",
    native_scale=True,
)
../_images/swarmplot_23_0.png

通过传递 matplotlib.axes.Axes.scatter() 的关键字参数,可以实现进一步的视觉定制

sns.swarmplot(
    data=tips, x="total_bill", y="day",
    marker="x", linewidth=1,
)
../_images/swarmplot_25_0.png

要制作具有多个面的绘图,使用 catplot()kind="swarm" 比直接使用 FacetGrid 更安全,因为 catplot() 将确保分类变量和色调变量在每个面中都正确同步

sns.catplot(
    data=tips, kind="swarm",
    x="time", y="total_bill", hue="sex", col="day",
    aspect=.5
)
../_images/swarmplot_27_0.png