2013-07-11 35 views
3

我对R相当陌生,所以请对您看到的任何内容发表评论。R:连续x轴上的条形图(时间缩放)

我有两个条件下(一个时间点)在不同时间点拍摄的数据,我想将它绘制成一个条形图,带有误差条和条在适当的时间点。

我现在有这个(从另一个问题窃取本网站):

library(ggplot2) 
example <- data.frame(tp = factor(c(0, "14a", "14b", 24, 48, 72)), means = c(1, 2.1, 1.9, 1.8, 1.7, 1.2), std = c(0.3, 0.4, 0.2, 0.6, 0.2, 0.3)) 
ggplot(example, aes(x = tp, y = means)) + 
    geom_bar(position = position_dodge()) + 
    geom_errorbar(aes(ymin=means-std, ymax=means+std)) 

现在我的时间点是一个因素,但事实证明,有一种跨越时间测量的分配不均使得情节不太好看。!

这是我的想象图:

enter image description here

我找到GGPLOT2包可以给你非常漂亮的图形,但我有很多困难,了解比我有其它的R东西。

+0

我错过了什么,也许,你的时间点是一个因素,但在所希望的描绘,他们被视为数值? 14a和14b在哪里? – agstudy

回答

2

在我们进入R之前,你必须认识到,即使在条形图中,x轴也需要一个数值。如果您将它们视为因素,那么默认情况下软件会假定条形之间的间距相等。在这种情况下,每个条的x值是多少?它可以是(0,14,14,24,48,72),但是它会在第14点画出两条你并不想看到的条。所以你必须拿出x值。

Joran通过在位置14通过修改joran使棒落入在x轴的正确位置中给出的代码修改所述条的宽度提供了一个很好的解决方案中,最终的解决方案是:

library(ggplot2) 
example <- data.frame(tp = factor(c(0, "14a", "14b", 24, 48, 72)), means = c(1, 2.1, 1.9, 1.8, 1.7, 1.2), std = c(0.3, 0.4, 0.2, 0.6, 0.2, 0.3)) 

example$tp1 <- gsub("a|b","",example$tp) 
example$grp <- c('a','a','b','a','a','a') 
example$tp2 <- as.numeric(example$tp1) 

ggplot(example, aes(x = tp2, y = means,fill = grp)) + 
    geom_bar(position = "dodge",stat = "identity") + 
    geom_errorbar(aes(ymin=means-std, ymax=means+std),position = "dodge") 

enter image description here

+0

谢谢,我应该发现那个细节。我会删除您的其他答案,并将其作为本文讨论的一部分。它并不是很好。 – joran

+0

谢谢,我编辑了答案并删除了我的其他答案。 –