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、数组或数组列表
用于绘图的数据集。如果
x
和y
缺失,则解释为宽格式。否则,它应该为长格式。- x, y, hue
data
中变量的名称或矢量数据 用于绘制长格式数据的输入。请参阅示例以了解解释。
- order, hue_order字符串列表
用于绘制分类级别的顺序;否则,从数据对象中推断级别。
- dodge布尔值
当分配了
hue
变量时,将其设置为True
将在分类轴上分离不同色调级别的蜂群,并缩小分配给每个条带的空间量。否则,每个级别的点将绘制在同一个蜂群中。- orient“v” | “h” | “x” | “y”
绘图的方向(垂直或水平)。这通常根据输入变量的类型推断,但当
x
和y
均为数字或绘制宽格式数据时,可以使用它来解决歧义。版本 v0.13.0 中的变更: 添加了 'x'/'y' 作为选项,分别相当于 'v'/'h'。
- colormatplotlib 颜色
绘图中元素的单一颜色。
- palette调色板名称、列表或字典
用于
hue
变量的不同级别的颜色。应该是可以被color_palette()
解释的内容,或是一个字典,将色调级别映射到 matplotlib 颜色。- size浮点数
标记的半径,以点为单位。
- edgecolormatplotlib 颜色,“gray” 为特殊情况
每个点周围线条的颜色。如果您传递
"gray"
,则亮度由用于点主体颜色调色板决定。- linewidth浮点数
围绕绘图元素的线条的宽度。
- log_scale布尔值或数字,或布尔值或数字对
将轴刻度设置为对数。单个值设置绘图中任何数字轴的数据轴。一对值独立设置每个轴。数字值被解释为所需的底数(默认为 10)。当为
None
或False
时,seaborn 将使用现有 Axes 刻度。版本 v0.13.0 中的新功能。
- native_scale布尔值
当为 True 时,分类轴上的数字或日期时间值将保留其原始缩放比例,而不是转换为固定索引。
版本 v0.13.0 中的新功能。
- formatter可调用对象
用于将分类数据转换为字符串的函数。影响分组和刻度标签。
版本 v0.13.0 中的新功能。
- legend“auto”、”brief”、”full” 或 False
如何绘制图例。如果为“brief”,则将使用均匀间隔值的样本表示数值
hue
和size
变量。如果为“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")
分配第二个变量将拆分点组以比较该变量的分类级别
sns.swarmplot(data=tips, x="total_bill", y="day")
通过交换分类变量和数值变量的分配,显示垂直方向的蜂群
sns.swarmplot(data=tips, x="day", y="total_bill")
在 0.12 版之前,分类变量的级别默认具有不同的颜色。要获得相同的效果,请明确分配
hue
变量sns.swarmplot(data=tips, x="total_bill", y="day", hue="day", legend=False)
或者,您可以将一个不同的变量分配给
hue
以显示多维关系sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex")
如果
hue
变量是数值型的,则默认情况下它将使用定量调色板进行映射(请注意,在 0.12 版之前并非如此)sns.swarmplot(data=tips, x="total_bill", y="day", hue="size")
使用
palette
来控制颜色映射,包括通过传递定性调色板的名称来强制进行分类映射sns.swarmplot(data=tips, x="total_bill", y="day", hue="size", palette="deep")
默认情况下,
hue
变量的不同级别在每个蜂群中相互交织,但设置dodge=True
将拆分它们sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex", dodge=True)
绘图的“方向”(定义为保留定量关系的方向)通常会自动推断。但在模棱两可的情况下,例如当两个轴变量都是数值型时,可以指定它
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)
当点的局部密度过高时,它们将被迫重叠在每个蜂群的“沟槽”中,并会发出警告。减小点的大小有助于避免此问题
sns.swarmplot(data=tips, x="total_bill", y="size", orient="h", size=3)
默认情况下,分类变量将映射到具有固定比例 (0, 1, …) 的离散索引,即使它本身是数值型的
sns.swarmplot( data=tips.query("size in [2, 3, 5]"), x="total_bill", y="size", orient="h", )
要禁用此行为并使用变量的原始比例,请设置
native_scale=True
(注意,这也改变了 y 轴上变量的顺序)sns.swarmplot( data=tips.query("size in [2, 3, 5]"), x="total_bill", y="size", orient="h", native_scale=True, )
通过传递
matplotlib.axes.Axes.scatter()
的关键字参数,可以实现进一步的视觉定制sns.swarmplot( data=tips, x="total_bill", y="day", marker="x", linewidth=1, )
要制作具有多个面的绘图,使用
catplot()
与kind="swarm"
比直接使用FacetGrid
更安全,因为catplot()
将确保分类变量和色调变量在每个面中都正确同步sns.catplot( data=tips, kind="swarm", x="time", y="total_bill", hue="sex", col="day", aspect=.5 )