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向量或
data
中的鍵 指定 x 軸和 y 軸位置的變數。
- hue
data
中的向量或鍵 將產生不同顏色點的分組變數。可以是類別或數值,儘管在後者情況下,顏色映射的行為會有所不同。
- size
data
中的向量或鍵 將產生不同大小點的分組變數。可以是類別或數值,儘管在後者情況下,大小映射的行為會有所不同。
- style
data
中的向量或鍵 將產生不同標記點的分組變數。可以有數值 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”,數值
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
更安全,因為它可以確保語義映射在各個 facet 中同步。sns.relplot( data=tips, x="total_bill", y="tip", col="time", hue="day", style="day", kind="scatter" )