我想绘制变量值之和的比例,而不是观察次数的比例。
对于后者,给定分类(例如切割)的观察比例可以这样完成:
library(ggplot2)
ggplot(data=diamonds) +
geom_bar(aes(x=cut,y=..count../sum(..count..)),position="dodge")
为了从其他变量(如“价格”)的值中引入信息,可以将其映射到“y”并使用“身份”概念:
ggplot(data=diamonds) +
geom_bar(aes(x=cut,y=price),stat="identity",position="dodge")
但是,我想结合两者绘制变量值之和的比例(例如价格之和) 所以有人必须将感兴趣的变量(例如价格)映射到y,而不是阻止y进行比例计算,除了聚合数据之外我还没有看到明显的方法(我喜欢避免)。 “
为了使我的意图更清晰,理想的解决方案看起来可能是这样的:
ggplot(data=diamonds) +
geom_bar(aes(x=cut,y=..sum(price)../sum(..sum(price)..)),position="dodge")
答案 0 :(得分:1)
library(ggplot2)
library(data.table)
df <- data.table(data.frame(diamonds))
df <- df[,.(value = sum(price)), by = cut]
windows()
ggplot(data = df, aes(x = cut, y = value/sum(value))) +
geom_bar(position="dodge", stat="identity")
** New Answer **
library(ggplot2)
library(data.table)
df <- data.table(data.frame(diamonds))
windows()
ggplot(data = df[,.(value = sum(price)), by = cut], aes(x = cut, y = value/sum(value))) +
geom_bar(position="dodge", stat="identity")
答案 1 :(得分:1)
您可以使用dplyr
执行此操作:
diamonds %>%
group_by(cut) %>%
mutate(sum_price = sum(price)) %>%
mutate(prop_sum = price/sum_price) %>%
ggplot(aes(cut, prop_sum)) +
geom_bar(stat = "identity", position = "dodge")