【问题标题】:Display summary statistics in barplot using ggplot/plotnine使用 ggplot/plotnine 在 barplot 中显示汇总统计信息
【发布时间】:2021-08-13 09:48:30
【问题描述】:

在下面的简化示例中,我希望显示每个堆叠条形图的总和(A 为 3,B 为 7),但我的代码显示所有值,而不是汇总统计信息。我究竟做错了什么?提前谢谢你。

import io
import pandas as pd
import plotnine as p9

data_string = """V1,V2,value
                 A,a,1
                 A,b,2
                 B,a,3 
                 B,b,4"""

data = io.StringIO(data_string)
df = pd.read_csv(data, sep=",")

p9.ggplot(df, p9.aes(x='V1', y='value', fill = 'V2')) + \
                p9.geom_bar(stat = 'sum') + \                
                p9.stat_summary(p9.aes(label ='stat(y)'), fun_y = sum, geom = "text")

【问题讨论】:

    标签: python ggplot2 plotnine


    【解决方案1】:

    问题在于数据的分组。由于您拥有全局fill 美学,您的数据将按V2 的类别分组。因此stat_summary 计算每组V2 的总和。为了解决这个问题,让fill 成为geom_bargeom_col 的局部美学。

    import io
    import pandas as pd
    import plotnine as p9
    
    data_string = """V1,V2,value
                     A,a,1
                     A,b,2
                     B,a,3 
                     B,b,4"""
    
    data = io.StringIO(data_string)
    df = pd.read_csv(data, sep=",")
    
    p9.ggplot(df, p9.aes(x='V1', y='value')) + \
        p9.geom_col(p9.aes(fill = 'V2')) + \
        p9.stat_summary(p9.aes(label ='stat(y)'), fun_y = sum, geom = "text")
    

    另一种选择是通过在stat_summary 中设置group=1 来覆盖全局分组:

    p9.stat_summary(p9.aes(label ='stat(y)', group = 1), fun_y = sum, geom = "text")
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多