3

我对 R 相当陌生,所以请对您看到的任何内容发表评论。

我在两种情况下(对于一个时间点)在不同的时间点采集了数据,我想将其绘制为带有误差条的条形图,并在适当的时间点使用条形图。

我目前有这个(从这个网站上的另一个问题偷来的):

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))

现在我的时间点是一个因素,但是随着时间的推移测量值分布不均的事实使得情节不太好。!

这就是我想象的图表:

在此处输入图像描述

我发现 ggplot2 包可以为您提供非常漂亮的图表,但与其他 R 内容相比,我很难理解它。

4

1 回答 1

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")

在此处输入图像描述

于 2013-07-11T18:02:10.213 回答