pandas 向海运条形图添加一个点,表示每个类别的平均值

xmd2e60i  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(76)

我正在使用seaborn创建三种情况下的带状图。示例数据如下所示:

df = pd.DataFrame(
        {
             'bill': [50, 45, 33, 23, 22, 34, 54, 22, 54, 76], 
             'day': ['sat', 'sat', 'sat', 'sat', 'sat', 'sun', 'sun', 'sun', 'sun', 'sun'], 
             'tip': ['yes', 'no', 'yes', 'no', 'yes', 'no', 'yes', 'no', 'yes', 'no']
             }
             )

海上阴谋:

sns.stripplot(x='day', y='bill', data=df, jitter=True, hue='tip', palette='deep', dodge=True)

我如何在每个类别中画出一个点来表示该类别的平均值?
我试过修改这个[代码][1],但是这创建了一天的平均值,而不是一天/小费的单独平均值。
先谢了!
[1]:https://stackoverflow.com/questions/67481900/how-to-add-a-mean-line-to-a-seaborn-stripplot-or-swarmplot#:~:text= import%20seaborn%20as,p)%0Aplt.show()

zc0qhyus

zc0qhyus1#

也许覆盖一个pointplot

import seaborn as sns
sns.stripplot(x='day', y='bill', data=df, jitter=True, hue='tip', palette='deep', dodge=True)
sns.pointplot(x='day', y='bill', data=df, hue='tip', palette='deep', dodge=True, linestyles='', errorbar=None)

输出:

你可以稍微欺骗一下,这样你的传奇就更有意义了:

import seaborn as sns
sns.stripplot(x='day', y='bill', data=df, jitter=True, hue='tip', palette='deep', dodge=True)
sns.pointplot(x='day', y='bill', data=df.assign(tip=df['tip']+' (avg)'),
              hue='tip', palette='deep',
              dodge=True, linestyles='', errorbar=None)

相关问题