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、array 或陣列列表

用於繪圖的資料集。如果 xy 不存在,則會將其解譯為寬格式。否則,預期為長格式。

x、y、huedata 中的變數名稱或向量資料

用於繪製長格式資料的輸入。有關解譯,請參閱範例。

order、hue_order字串列表

繪製類別層級的順序;否則會從資料物件推斷出層級。

dodgebool

當指定 hue 變數時,將此設定為 True 會沿著類別軸分隔不同色調層級的蜂群,並縮小分配給每個條帶的空間量。否則,每個層級的點將繪製在同一個蜂群中。

orient“v” | “h” | “x” | “y”

圖形的方位(垂直或水平)。這通常根據輸入變數的類型推斷出來,但當 xy 都是數值或繪製寬格式資料時,可以用於解決歧義。

變更於 v0.13.0 版:新增 ‘x’/’y’ 作為選項,相當於 ‘v’/’h’。

colormatplotlib 顏色

繪圖中元素的單一顏色。

palette調色盤名稱、清單或字典

用於 hue 變數不同層級的顏色。應該是可以用 color_palette() 解譯的東西,或是將色調層級對應到 matplotlib 顏色的字典。

sizefloat

標記的半徑,以點為單位。

edgecolormatplotlib 顏色,"gray" 是特殊情況

每個點周圍線條的顏色。如果您傳遞 "gray",則亮度由用於點主體的調色盤決定。

linewidthfloat

框架繪圖元素的線條寬度。

log_scale布林值或數字,或一對布林值或數字

將軸刻度設為對數。單一值設定繪圖中任何數值軸的資料軸。一對值則分別設定每個軸。數值會解譯為所需的底數(預設值為 10)。當 NoneFalse 時,seaborn 會延遲到現有的軸刻度。

v0.13.0 版新增。

native_scalebool

為 True 時,類別軸上的數值或日期時間值將維持其原始縮放,而不是轉換為固定索引。

v0.13.0 版新增。

formatter可呼叫物件

將類別資料轉換為字串的函式。會影響分組和刻度標籤。

v0.13.0 版新增。

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

如何繪製圖例。如果為 “brief”,則數值 huesize 變數將以均勻間隔的值範例表示。如果為 “full”,則每個群組都會在圖例中獲得一個條目。如果為 “auto”,則根據級別數量選擇簡短或完整表示。如果為 False,則不會新增圖例資料且不會繪製圖例。

v0.13.0 版新增。

axmatplotlib Axes

要在其上繪製圖形的軸物件,否則使用目前的軸。

kwargs鍵,值對應

其他關鍵字引數會傳遞給 matplotlib.axes.Axes.scatter()

回傳值:
axmatplotlib Axes

回傳繪製圖形的軸物件。

另請參閱

boxplot

具有類似 API 的傳統箱形圖。

violinplot

箱形圖和核密度估計的組合。

stripplot

其中一個變數是類別變數的散佈圖。可以與其他圖形結合使用以顯示每個觀測值。

catplot

將類別圖與 FacetGrid 結合使用。

範例

指定單一數值變數會顯示其單變數分佈,點會沿著另一個軸調整,使其不會重疊

tips = sns.load_dataset("tips")
sns.swarmplot(data=tips, x="total_bill")
../_images/swarmplot_1_0.png

指定第二個變數會分割點群組,以比較該變數的類別級別

sns.swarmplot(data=tips, x="total_bill", y="day")
../_images/swarmplot_3_0.png

透過交換類別變數和數值變數的指定,顯示垂直方向的蜂群圖

sns.swarmplot(data=tips, x="day", y="total_bill")
../_images/swarmplot_5_0.png

在 0.12 版之前,類別變數的級別預設有不同的顏色。若要獲得相同的效果,請明確指定 hue 變數

sns.swarmplot(data=tips, x="total_bill", y="day", hue="day", legend=False)
../_images/swarmplot_7_0.png

或者,您可以為 hue 指定不同的變數,以顯示多維關係

sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex")
../_images/swarmplot_9_0.png

如果 hue 變數是數值,則預設會使用定量調色盤進行對應(請注意,這在 0.12 版之前不是這種情況)

sns.swarmplot(data=tips, x="total_bill", y="day", hue="size")
../_images/swarmplot_11_0.png

使用 palette 來控制顏色對應,包括透過傳遞定性調色盤的名稱來強制進行類別對應

sns.swarmplot(data=tips, x="total_bill", y="day", hue="size", palette="deep")
../_images/swarmplot_13_0.png

預設情況下,hue 變數的不同級別會混合在每個蜂群圖中,但設定 dodge=True 將會分隔它們

sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex", dodge=True)
../_images/swarmplot_15_0.png

圖形的「方向」(定義為沿著保留定量關係的方向)通常會自動推斷。但在模稜兩可的情況下,例如當兩個軸變數都是數值時,可以指定它

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)
../_images/swarmplot_17_1.png

當點的局部密度過高時,它們將會被迫重疊在每個蜂群圖的「間隙」中,並發出警告。減小點的大小有助於避免此問題

sns.swarmplot(data=tips, x="total_bill", y="size", orient="h", size=3)
../_images/swarmplot_19_0.png

預設情況下,類別變數將會對應到具有固定比例(0, 1, ...)的離散索引,即使它是數值也是如此

sns.swarmplot(
    data=tips.query("size in [2, 3, 5]"),
    x="total_bill", y="size", orient="h",
)
../_images/swarmplot_21_0.png

若要停用此行為並使用變數的原始比例,請設定 native_scale=True(請注意,這也會變更 y 軸上變數的順序)

sns.swarmplot(
    data=tips.query("size in [2, 3, 5]"),
    x="total_bill", y="size", orient="h",
    native_scale=True,
)
../_images/swarmplot_23_0.png

可以透過傳遞 matplotlib.axes.Axes.scatter() 的關鍵字引數來實現進一步的視覺自訂

sns.swarmplot(
    data=tips, x="total_bill", y="day",
    marker="x", linewidth=1,
)
../_images/swarmplot_25_0.png

若要繪製具有多個分面的圖形,使用 catplot() 並使用 kind="swarm" 比直接使用 FacetGrid 更安全,因為 catplot() 會確保每個分面中的類別變數和色調變數都已正確同步

sns.catplot(
    data=tips, kind="swarm",
    x="time", y="total_bill", hue="sex", col="day",
    aspect=.5
)
../_images/swarmplot_27_0.png