seaborn.scatterplot#

seaborn.scatterplot(data=None, *, x=None, y=None, hue=None, size=None, style=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=True, style_order=None, legend='auto', ax=None, **kwargs)#

绘制散点图,并可能包含多个语义分组。

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

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

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

参数:
datapandas.DataFrame, numpy.ndarray, 映射或序列

输入数据结构。可以分配给命名变量的长格式向量集合或将被内部重新整形的大格式数据集。

x, y数据中的向量或键

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

hue数据中的向量或键

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

size数据中的向量或键

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

style数据中的向量或键

分组变量,将生成具有不同标记的点。可以具有数值数据类型,但始终被视为类别变量。

palette字符串、列表、字典或 matplotlib.colors.Colormap

用于选择映射 hue 语义时使用的颜色方法。字符串值将传递给 color_palette()。列表或字典值表示类别映射,而色图对象表示数值映射。

hue_order字符串向量

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

hue_norm元组或 matplotlib.colors.Normalize

可以是设置数据单位中规范化范围的两个值对,也可以是将数据单位映射到 [0, 1] 区间的对象。使用表示数值映射。

sizes列表、字典或元组

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

size_order列表

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

size_norm元组或 Normalize 对象

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

markers布尔值、列表或字典

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

style_order列表

指定 style 变量级别显示顺序,否则从数据中确定。当 style 变量为数值时,此选项不适用。

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

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

axmatplotlib.axes.Axes

用于绘图的预先存在的坐标轴。否则,在内部调用 matplotlib.pyplot.gca()

kwargs键值映射

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

返回:
matplotlib.axes.Axes

包含绘图的 Matplotlib 坐标轴。

另请参阅

lineplot

使用线绘制数据。

stripplot

绘制带有抖动的分类散点图。

swarmplot

绘制带有非重叠点的分类散点图。

示例

这些示例将使用“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.scatterplot(data=tips, x="total_bill", y="tip")
../_images/scatterplot_3_0.png

将变量分配给 hue 将将其级别映射到点的颜色。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
../_images/scatterplot_5_0.png

将同一个变量分配给 style 还将改变标记,并创建一个更易理解的绘图。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time")
../_images/scatterplot_7_0.png

huestyle 分配给不同的变量将独立地改变颜色和标记。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time")
../_images/scatterplot_9_0.png

如果分配给 hue 的变量是数值,则语义映射将是定量的,并使用不同的默认调色板。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size")
../_images/scatterplot_11_0.png

传递分类调色板的名称或显式颜色(作为 Python 列表或字典)以强制 hue 变量的分类映射。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", palette="deep")
../_images/scatterplot_13_0.png

如果有大量唯一的数值,图例将显示一个代表性的、均匀间隔的集合。

tip_rate = tips.eval("tip / total_bill").rename("tip_rate")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue=tip_rate)
../_images/scatterplot_15_0.png

数值变量也可以分配给 size 以将语义映射应用于点的面积。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", size="size")
../_images/scatterplot_17_0.png

使用 sizes 控制标记面积范围,并设置 legend="full" 以强制所有唯一值出现在图例中。

sns.scatterplot(
    data=tips, x="total_bill", y="tip", hue="size", size="size",
    sizes=(20, 200), legend="full"
)
../_images/scatterplot_19_0.png

将值元组或 matplotlib.colors.Normalize 对象传递给 hue_norm 以控制定量色调映射。

sns.scatterplot(
    data=tips, x="total_bill", y="tip", hue="size", size="size",
    sizes=(20, 200), hue_norm=(0, 7), legend="full"
)
../_images/scatterplot_21_0.png

通过传递 Python 列表或字典形式的标记代码来控制用于映射 style 变量的特定标记。

markers = {"Lunch": "s", "Dinner": "X"}
sns.scatterplot(data=tips, x="total_bill", y="tip", style="time", markers=markers)
../_images/scatterplot_23_0.png

其他关键字参数传递给 matplotlib.axes.Axes.scatter(),允许你直接设置未进行语义映射的绘图属性。

sns.scatterplot(data=tips, x="total_bill", y="tip", s=100, color=".2", marker="+")
../_images/scatterplot_25_0.png

前面的示例使用长格式数据集。在处理宽格式数据时,将使用 huestyle 映射将每列绘制到其索引。

index = pd.date_range("1 1 2000", periods=100, freq="m", name="date")
data = np.random.randn(100, 4).cumsum(axis=0)
wide_df = pd.DataFrame(data, index, ["a", "b", "c", "d"])
sns.scatterplot(data=wide_df)
../_images/scatterplot_27_0.png

使用 relplot() 来结合 scatterplot()FacetGrid。这允许在额外的分类变量中进行分组,并在多个子图中进行绘制。

使用 relplot() 比直接使用 FacetGrid 更安全,因为它确保了跨面的语义映射同步。

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