2

次のシーボーン 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

パンダを使用groupbyして平均を集計できます。そして、sns.scatterplotそれらをプロットします。何らかの理由で、散布図がビュー制限をリセットします。前に保存xlimし、ylim後でリセットすることができます。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()

手段を使ったスウォームプロット

PS: 目的のビュー制限を取得するための別の回避策は、最初に手段を描画し (ただし、zorder少なくとも 4 つ)、その後スウォームプロットを描画することです。

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 のマニュアル ページ の最後の例のように、boxplot の上に 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 に答える