2

假设我有以下 seaborn swarmplot:

import seaborn as sns

sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.swarmplot(x="day", y="total_bill", data=tips)

群图

有什么简单的方法可以在图上显示每个群体的平均值,可能使用不同的符号,例如“X”?

4

2 回答 2

2

您可以使用 pandas'groupby来聚合均值。然后sns.scatterplot绘制它们。出于某种原因,散点图会重置视图限制。您可以在之前保存xlimylim在之后重置它们。要将散点图放在 swarmplot 顶部,可以设置 zorder(使用 Seaborn 0.11.1 尝试):

import seaborn as sns

sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.swarmplot(x="day", y="total_bill", data=tips)
df_means = tips.groupby("day")["total_bill"].agg("mean").reset_index()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
sns.scatterplot(x="day", y="total_bill", marker='X', color='black', s=100, zorder=3, ax=ax, legend=False, data=df_means)
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.show()

swarmplot 与手段

PS:获得所需视图限制的另一种解决方法是首先绘制均值(但zorder至少有 4 个),然后绘制 swarmplot:

ax = sns.scatterplot(x="day", y="total_bill", marker='X', color='black', s=100, zorder=4, legend=False, data=df_means)
sns.swarmplot(x="day", y="total_bill", data=tips, ax=ax)

另一种方法是在箱线图的顶部绘制 swarmplot,如swarmplot 手册页上的最后一个示例。

于 2021-04-06T19:44:37.913 回答
1

要获得python中值的平均值,你可以这样做

def avg(arr): # arr is a list of values to get the average of
   return sum(arr) / len(arr)
于 2021-04-06T19:27:54.713 回答