ggplot geom_bar 与 stat = "sum"

Moo*_*per 6 r ggplot2

我想绘制一个条形图,沿两个维度对变量求和,一个将沿 展开x,另一个将垂直展开(堆叠)。

我希望以下两条指令能做同样的事情,但它们没有,只有第二条给出了所需的输出(我自己汇总数据的地方)。

我想了解在第一种情况下发生了什么,以及是否有办法使用ggplot2的内置聚合功能来获得正确的输出。

library(ggplot2)
library(dplyr)
p1 <- ggplot(diamonds,aes(cut,price,fill=color)) + 
  geom_bar(stat="sum",na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

产生这个情节:

在此处输入图片说明

p2 <- ggplot(diamonds %>%
                group_by(cut,color) %>%
                summarize_at("price",sum,na.rm=T),
              aes(cut,price,fill=color)) +
  geom_bar(stat="identity",na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

产生这张图片:

在此处输入图片说明

这是我们的条形顶部应该在哪里,p1 没有给出这些值:

diamonds %>% group_by(cut) %>% summarize_at("price",sum,na.rm=TRUE)
# # A tibble: 5 x 2
# cut    price
# <ord>    <int>
# 1      Fair  7017600
# 2      Good 19275009
# 3 Very Good 48107623
# 4   Premium 63221498
# 5     Ideal 74513487
Run Code Online (Sandbox Code Playgroud)

cre*_*zml 7

你可能会误会stat的选项geom_bar。在这种情况下,由于您希望在每个条形中对每个因子的值求和,并且根据每种颜色中总和的数量对条形进行着色,因此您可以简化geom_col使用这些值的调用酒吧的高度;因此“求和”每个类别中的所有值。例如,以下将给出所需的输出:

p1 <- ggplot(diamonds,aes(cut,price,fill=color)) + 
        geom_col(na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

或者,如果您想geom_bar与 stat 调用一起使用,那么您想使用“身份”统计:

p1 <- ggplot(diamonds,aes(cut,price,fill=color)) + 
        geom_bar(stat = "identity", na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请考虑此线程:https : //stackoverflow.com/a/27965637/6722506