【问题标题】:R: Bar plot on a continous x-axis (time-scaled)R:连续 x 轴上的条形图(时间刻度)
【发布时间】:2013-07-11 16:27:13
【问题描述】:

我对 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 内容相比,我很难理解它。

【问题讨论】:

  • 我可能错过了一些东西,您的时间点是一个因素,但在所需的情节中它们被视为数值? 14a 和 14b 在哪里?

标签: r ggplot2 bar-chart


【解决方案1】:

在我们进入 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")

【讨论】:

  • 谢谢,我应该发现这个细节。我会删除您的其他答案,并将其作为讨论的一部分简单地包含在此答案中。它本身并不是很好。
  • 谢谢,我已经编辑了答案并删除了我的其他答案。