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 或陣列列表
用於繪圖的資料集。如果
x
和y
不存在,則會將其解譯為寬格式。否則,預期為長格式。- x、y、hue
data
中的變數名稱或向量資料 用於繪製長格式資料的輸入。有關解譯,請參閱範例。
- order、hue_order字串列表
繪製類別層級的順序;否則會從資料物件推斷出層級。
- dodgebool
當指定
hue
變數時,將此設定為True
會沿著類別軸分隔不同色調層級的蜂群,並縮小分配給每個條帶的空間量。否則,每個層級的點將繪製在同一個蜂群中。- orient“v” | “h” | “x” | “y”
圖形的方位(垂直或水平)。這通常根據輸入變數的類型推斷出來,但當
x
和y
都是數值或繪製寬格式資料時,可以用於解決歧義。變更於 v0.13.0 版:新增 ‘x’/’y’ 作為選項,相當於 ‘v’/’h’。
- colormatplotlib 顏色
繪圖中元素的單一顏色。
- palette調色盤名稱、清單或字典
用於
hue
變數不同層級的顏色。應該是可以用color_palette()
解譯的東西,或是將色調層級對應到 matplotlib 顏色的字典。- sizefloat
標記的半徑,以點為單位。
- edgecolormatplotlib 顏色,"gray" 是特殊情況
每個點周圍線條的顏色。如果您傳遞
"gray"
,則亮度由用於點主體的調色盤決定。- linewidthfloat
框架繪圖元素的線條寬度。
- log_scale布林值或數字,或一對布林值或數字
將軸刻度設為對數。單一值設定繪圖中任何數值軸的資料軸。一對值則分別設定每個軸。數值會解譯為所需的底數(預設值為 10)。當
None
或False
時,seaborn 會延遲到現有的軸刻度。v0.13.0 版新增。
- native_scalebool
為 True 時,類別軸上的數值或日期時間值將維持其原始縮放,而不是轉換為固定索引。
v0.13.0 版新增。
- formatter可呼叫物件
將類別資料轉換為字串的函式。會影響分組和刻度標籤。
v0.13.0 版新增。
- legend“auto”, “brief”, “full”, 或 False
如何繪製圖例。如果為 “brief”,則數值
hue
和size
變數將以均勻間隔的值範例表示。如果為 “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")
指定第二個變數會分割點群組,以比較該變數的類別級別
sns.swarmplot(data=tips, x="total_bill", y="day")
透過交換類別變數和數值變數的指定,顯示垂直方向的蜂群圖
sns.swarmplot(data=tips, x="day", y="total_bill")
在 0.12 版之前,類別變數的級別預設有不同的顏色。若要獲得相同的效果,請明確指定
hue
變數sns.swarmplot(data=tips, x="total_bill", y="day", hue="day", legend=False)
或者,您可以為
hue
指定不同的變數,以顯示多維關係sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex")
如果
hue
變數是數值,則預設會使用定量調色盤進行對應(請注意,這在 0.12 版之前不是這種情況)sns.swarmplot(data=tips, x="total_bill", y="day", hue="size")
使用
palette
來控制顏色對應,包括透過傳遞定性調色盤的名稱來強制進行類別對應sns.swarmplot(data=tips, x="total_bill", y="day", hue="size", palette="deep")
預設情況下,
hue
變數的不同級別會混合在每個蜂群圖中,但設定dodge=True
將會分隔它們sns.swarmplot(data=tips, x="total_bill", y="day", hue="sex", dodge=True)
圖形的「方向」(定義為沿著保留定量關係的方向)通常會自動推斷。但在模稜兩可的情況下,例如當兩個軸變數都是數值時,可以指定它
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)
當點的局部密度過高時,它們將會被迫重疊在每個蜂群圖的「間隙」中,並發出警告。減小點的大小有助於避免此問題
sns.swarmplot(data=tips, x="total_bill", y="size", orient="h", size=3)
預設情況下,類別變數將會對應到具有固定比例(0, 1, ...)的離散索引,即使它是數值也是如此
sns.swarmplot( data=tips.query("size in [2, 3, 5]"), x="total_bill", y="size", orient="h", )
若要停用此行為並使用變數的原始比例,請設定
native_scale=True
(請注意,這也會變更 y 軸上變數的順序)sns.swarmplot( data=tips.query("size in [2, 3, 5]"), x="total_bill", y="size", orient="h", native_scale=True, )
可以透過傳遞
matplotlib.axes.Axes.scatter()
的關鍵字引數來實現進一步的視覺自訂sns.swarmplot( data=tips, x="total_bill", y="day", marker="x", linewidth=1, )
若要繪製具有多個分面的圖形,使用
catplot()
並使用kind="swarm"
比直接使用FacetGrid
更安全,因為catplot()
會確保每個分面中的類別變數和色調變數都已正確同步sns.catplot( data=tips, kind="swarm", x="time", y="total_bill", hue="sex", col="day", aspect=.5 )