我想绘制一个柱状图,将一个变量沿着两个维度求和,一个维度将沿着 x
方向展开,另一个维度将垂直堆叠。
我期望以下两个指令可以实现相同的功能,但它们不能。只有第二个指令给出了预期的输出(在此我自己聚合数据)。
我希望了解第一种情况下发生了什么,并且是否有一种方法可以使用 ggplot2
的内置聚合功能来获得正确的输出。
library(ggplot2)
library(dplyr)
p1 <- ggplot(diamonds,aes(cut,price,fill=color)) +
geom_bar(stat="sum",na.rm=TRUE)
产生以下图表:
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)
产生以下图片:
这里应该是我们的柱状图顶部,但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
ggplot(diamonds,aes(cut,fill=color,weight = price)) + geom_bar(na.rm=TRUE)
也会产生与p2
相同的结果。 - joranstat_identity
技术上你会得到一堆叠在一起的条形图,但由于它们具有相同的颜色,看起来就像是一个总和。该链接还展示了stat_summary
的很酷的用法,这是我之前不知道的。 - moodymudskipper