在连续的x轴上(时间刻度)制作条形图

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

现在我的时间点是一个因素,但事实上,在各个时间点上测量的数据分布不平均使得图表不太好看。
我想象中的图表如下所示: enter image description here 我发现ggplot2包可以生成非常漂亮的图表,但与其他R内容相比,我更难理解它。

我可能错过了什么,你的时间点是一个因素,但在所需的图中它们被视为数值?14a和14b在哪里? - agstudy
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")

enter image description here


谢谢,我应该注意到那个细节。我会删除你的另一个答案,并将其作为本答案讨论的一部分包含在内。它本身并不是很好。 - joran
谢谢,我已经编辑了答案并删除了我的另一个答案。 - Rohit Das

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接