2015-08-28 36 views
0

我已经尝试了几件事情,使ggplot情节barcharts与从数据框中的因素派生的手段,但我没有成功。 如果考虑:ggplot2:与组意味着堆栈barcharts

df <- as.data.frame(matrix(rnorm(60*2, mean=3,sd=1), 60, 2)) 
df$factor <- c(rep(factor(1:3), each=20)) 

我想要实现像这样的堆叠,相对条形图: enter image description here

此图表用手动计算在一个单独的数据帧组装置,使其熔化并使用geom_bar(stat="identity", position = "fill)创建并scale_y_continuous(labels = percent_format())。我还没有找到一种方法来将stat_summary与堆叠的barcharts结合使用。

在第二步,我想有错误列附加到每列的休息时间。我有六个处理和三个物种,所以错误条应该没问题。

+0

为什么要堆叠条形图的方式?我认为他们很难解释。 – Heroka

+0

我有六个测量每六个日期的三种物种。数据几乎是正态分布的,我想显示每个物种的年度变化。因此,这些条代表60个采样区的平均物种丰度。 – nouse

回答

1

对于任何复杂的事情,我认为预先计算数字会更容易,然后绘制它们。这是很容易与dplyr/tidyr(即使是错误吧)完成:

gather(df, 'cat', 'value', 1:2) %>% 
    group_by(factor, cat) %>% 
    summarise(mean=mean(value), se=sd(value)/sqrt(n())) %>% 
    group_by(cat) %>% 
    mutate(perc=mean/sum(mean), ymin=cumsum(perc) -se/sum(mean), ymax=cumsum(perc) + se/sum(mean)) %>% 
    ggplot(aes(x=cat, y=perc, fill=factor(factor))) + 
     geom_bar(stat='identity') + 
     geom_errorbar(aes(ymax=ymax, ymin=ymin)) 

enter image description here

当然,这看上去有些奇怪,因为有100%左右的误差条来堆叠条形。我想你会的方式更好ploting实际的数据点,加上手段和误差棒和使用刻面:

gather(df, 'cat', 'value', 1:2) %>% 
    group_by(cat, factor) %>% 
    summarise(mean=mean(value), se=sd(value)/sqrt(n())) %>% 
    ggplot(aes(x=cat, y=mean, colour=factor(factor))) + 
     geom_point(aes(y=value), position=position_jitter(width=.3, height=0), data=gather(df, 'cat', 'value', 1:2)) + 
     geom_point(shape=5, size = 3) + 
     geom_errorbar(aes(ymin=mean-se, ymax=mean+se), width=.1) + 
     facet_grid(factor ~ .) 

enter image description here

这样,任何人都可以检查数据,看清楚它们是正常分布

+0

明天我会试一下,非常感谢你! – nouse