我有一个如下所示的数据集:
colour week value
Blue 201523 374
Blue 201524 310
Blue 201525 300
Green 201523 1951
Green 201524 2299
Green 201525 2111
Red 201523 414
Red 201524 361
Red 201525 279
我希望生成一个叠加图,其中总值与按时间分组的时间百分比。
以下代码给出了正确的图,但是使用绝对值而不是总数的百分比(数据集保存为df):
g <- ggplot(data = df)
g <- g + geom_bar(stat = 'identity', aes(x = Time, y = value, fill = Colour)) + scale_y_continuous(labels = percent)
g <- g + labs(x = 'Timespan', y = '') + guides(fill = guide_legend(reverse = FALSE))
theme(legend.text = element_text(size = 12), axis.title.x = element_text(size = 14, vjust = -0.5, face = 'bold'), legend.title = element_text(size = 14),
axis.text.x = element_text(angle = 45, size = 10.5))
g
有没有办法在ggplot的调用中获得总数的百分比?或者如果没有,可以在ggplot调用之前使用ddply函数执行此操作?
答案 0 :(得分:0)
这样的东西?
library(ggplot2)
df$pct <- df$value/ave(df$value,df$week,FUN=sum)
ggplot(df, aes(x=week, y=pct, fill=tolower(colour))) +
geom_bar(stat="identity")+
scale_fill_identity("color", guide="legend")
几点说明:
aes(y=value/sum(value),...)
的调用中使用ggplot
,但不幸的是,聚合函数(如sum(...)
)不尊重隐式分组由fill=...
定义。因此,您可以获得所有值的总和,而不仅仅是给定组的值。如果你想要后者,你必须像上面那样扩充data.frame。ggplot
担心颜色。我不得不使用scale_fill_identity(...)
来覆盖ggplot的默认配色方案。