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)#
绘制散点图,并可能包含多个语义分组。
可以使用
hue
、size
和style
参数显示x
和y
之间的关系的不同数据子集。这些参数控制用于标识不同子集的视觉语义。可以通过使用所有三种语义类型独立地显示最多三个维度,但这类型的图可能难以解释,并且通常效率低下。使用冗余语义(即hue
和style
同时用于同一个变量)有助于使图形更易于访问。有关更多信息,请参阅 教程。
默认情况下,如果存在
hue
(以及在较小程度上size
)语义,则其处理方式(在很大程度上取决于变量被推断为表示“数值”数据还是“类别”数据)。特别是,数值变量默认情况下用连续色图表示,并且图例条目显示具有值的有规律的“刻度”,这些值可能存在于数据中,也可能不存在。可以通过各种参数控制此行为,如下所述并举例说明。- 参数:
- data
pandas.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”,则数值型
hue
和size
变量将以均匀间隔值的样本表示。如果为“full”,则每个组将在图例中获得一个条目。如果为“auto”,则根据级别数量选择简短或完整表示。如果为False
,则不会添加图例数据,也不会绘制图例。- ax
matplotlib.axes.Axes
用于绘图的预先存在的坐标轴。否则,在内部调用
matplotlib.pyplot.gca()
。- kwargs键值映射
其他关键字参数传递给
matplotlib.axes.Axes.scatter()
。
- data
- 返回:
matplotlib.axes.Axes
包含绘图的 Matplotlib 坐标轴。
示例
这些示例将使用“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 传递长格式数据并分配
x
和y
将绘制两个变量之间的散点图。sns.scatterplot(data=tips, x="total_bill", y="tip")
将变量分配给
hue
将将其级别映射到点的颜色。sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
将同一个变量分配给
style
还将改变标记,并创建一个更易理解的绘图。sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time")
将
hue
和style
分配给不同的变量将独立地改变颜色和标记。sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time")
如果分配给
hue
的变量是数值,则语义映射将是定量的,并使用不同的默认调色板。sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size")
传递分类调色板的名称或显式颜色(作为 Python 列表或字典)以强制
hue
变量的分类映射。sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", palette="deep")
如果有大量唯一的数值,图例将显示一个代表性的、均匀间隔的集合。
tip_rate = tips.eval("tip / total_bill").rename("tip_rate") sns.scatterplot(data=tips, x="total_bill", y="tip", hue=tip_rate)
数值变量也可以分配给
size
以将语义映射应用于点的面积。sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", size="size")
使用
sizes
控制标记面积范围,并设置legend="full"
以强制所有唯一值出现在图例中。sns.scatterplot( data=tips, x="total_bill", y="tip", hue="size", size="size", sizes=(20, 200), legend="full" )
将值元组或
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" )
通过传递 Python 列表或字典形式的标记代码来控制用于映射
style
变量的特定标记。markers = {"Lunch": "s", "Dinner": "X"} sns.scatterplot(data=tips, x="total_bill", y="tip", style="time", markers=markers)
其他关键字参数传递给
matplotlib.axes.Axes.scatter()
,允许你直接设置未进行语义映射的绘图属性。sns.scatterplot(data=tips, x="total_bill", y="tip", s=100, color=".2", marker="+")
前面的示例使用长格式数据集。在处理宽格式数据时,将使用
hue
和style
映射将每列绘制到其索引。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)
使用
relplot()
来结合scatterplot()
和FacetGrid
。这允许在额外的分类变量中进行分组,并在多个子图中进行绘制。使用
relplot()
比直接使用FacetGrid
更安全,因为它确保了跨面的语义映射同步。sns.relplot( data=tips, x="total_bill", y="tip", col="time", hue="day", style="day", kind="scatter" )