首页 > 解决方案 > 条形图中的ggplot累积值

问题描述

我正在尝试开发一个条形图,显示几个类别的累积值(在本例中为“a”和“b”)。图表本身看起来不错,因为 a 的值绘制为 10,b 的值绘制为 9.5,但标签已关闭。b 的标签显示 b (1.5, 1, 5, 2) 的单个值,而不是正确的总和“9.5”。

所以,问题是:如何告诉 ggplot 我想将累积值(总和)视为标签而不是每个单个值?

最好的paradroid

library(ggplot2)
library(scales)

mydf<-data.frame(col1=c("a","b", "b", "b", "b")
                 ,col2=c(10,1.5, 1, 5, 2))


barchart <- function(df, v1, v2) 
  {
  ggplot(df, aes(x = v1, y = v2, na.rm = TRUE)) + 
    geom_bar(stat = "identity") +
    scale_y_continuous(labels = scales::comma) + 
    geom_text(aes(label = v2)) +
    coord_flip()
    }


bchart <- barchart(mydf, mydf$col1, mydf$col2)
print(bchart)[![enter image description here][1]][1]

输出

标签: rggplot2

解决方案


您可以使用 来汇总函数内的数据dplyr,假设您不需要查看每个条形的构建。

library(ggplot2)
library(dplyr)
library(scales)

mydf<-data.frame(col1=c("a","b", "b", "b", "b")
                 ,col2=c(10,1.5, 1, 5, 2))

barchart <- function(df, v1, v2)
  {
    df %>% 
    group_by({{v1}}) %>%
    summarise(v2 = sum({{v2}})) %>% 
  ggplot(aes(x = {{v1}}, y = v2)) + 
    geom_col() +
    scale_y_continuous(labels = scales::comma) + 
    geom_text(aes(label = v2)) +
    coord_flip()

}

bchart <- barchart(mydf, col1, col2)

bchart

reprex 包于 2021-08-23 创建 (v2.0.0 )


推荐阅读