我想绘制一个条形图,沿两个维度对变量求和,一个将沿 展开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)
你可能会误会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