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.DataFramenumpy.ndarray、映射或序列

輸入資料結構。可以是長格式向量的集合(可以指派給具名變數),也可以是內部將會重新塑形的寬格式資料集。

x, y向量或 data 中的鍵

指定 x 軸和 y 軸位置的變數。

huedata 中的向量或鍵

將產生不同顏色點的分組變數。可以是類別或數值,儘管在後者情況下,顏色映射的行為會有所不同。

sizedata 中的向量或鍵

將產生不同大小點的分組變數。可以是類別或數值,儘管在後者情況下,大小映射的行為會有所不同。

styledata 中的向量或鍵

將產生不同標記點的分組變數。可以有數值 dtype,但始終會被視為類別。

palette字串、清單、字典或 matplotlib.colors.Colormap

當映射 hue 語義時,用於選擇顏色的方法。字串值會傳遞至 color_palette()。清單或字典值表示類別映射,而色圖物件表示數值映射。

hue_order字串向量

指定 hue 語義的類別層級的處理和繪圖順序。

hue_norm元組或 matplotlib.colors.Normalize

一對在資料單位中設定正規化範圍的值,或是將資料單位映射到 [0, 1] 區間的物件。使用表示數值映射。

sizes清單、字典或元組

決定使用 size 時如何選擇大小的物件。清單或字典引數應該為每個唯一資料值提供大小,這會強制進行類別解釋。引數也可以是最小值、最大值元組。

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 更安全,因為它可以確保語義映射在各個 facet 中同步。

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