连接误差线的平均点

时间:2012-09-20 00:36:51

标签: r ggplot2

在ggplot2中,我正在尝试一个我出于某种原因无法获得的简单事物。我已在数据框中调整了均值和SE,并想要绘制平均值,误差条,然后用平均值连接平均值。这是代码和错误(除了用geom_line连接方法之外,它会执行所有操作(使用RCookbook

library(ggplot2)
#data set
data1 <- structure(list(group = structure(1:3, .Label = c("1", "2", "3"
), class = "factor"), estimate = c(55.7466654122763, 65.0480954172939, 
61.9552391704298), SE = c(2.33944612149257, 2.33243565412438, 
2.33754952927041), t.ratio = c(23.8290016171476, 27.8884844271143, 
26.5043535525714)), .Names = c("group", "estimate", "SE", "t.ratio"
), row.names = c(NA, 3L), class = "data.frame")

#the attempted plot
pd <- position_dodge(.1)
ggplot(data1, aes(x=group, y=estimate, group=group)) + 
    geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
        colour="black", width=.1, position=pd) +
    geom_line(data=data1, aes(x=group, y=estimate)) + 
    geom_point(position=pd, size=4)

错误:

ymax not defined: adjusting position using y instead
geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

3 个答案:

答案 0 :(得分:4)

如果您在ggplot调用中删除group分组,并在x = as.numeric(group )的调用中设置geom_line,则可以正常工作。

此外,您无需在data1

中重新引用geom_line
ggplot(data1, aes(x=group, y=estimate)) + 
  geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
  colour="black", width=.1, position=pd) +
  geom_line( aes(x=as.numeric(group), y=estimate)) + 
  geom_point(position=pd, size=4)

enter image description here

如果您group group,则geom_line只有一个值可以创建一行,因此会显示错误消息。如果ggplotxy映射变量视为一个因素,则会出现同样的错误 - 这是因为如果将变量编码为因子R(和ggplot)将认为它们是独立的群体,而不是连接点 - 这是合理的默认行为。

编辑 - 使用字母系数标签

这将与字母因子标签一起使用,因为R内部编码因子的方式(即as.numeric(factor)返回的数字不是因子标签)

ie.e

将群组更改为abc

levels(data1[['group']]) <- letters[1:3] 
ggplot(data1, aes(x=group, y=estimate)) + 
  geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
  colour="black", width=.1, position=pd) +
  geom_line( aes(x=as.numeric(group), y=estimate)) + 
  geom_point(position=pd, size=4)

enter image description here

答案 1 :(得分:2)

作为mnel答案的替代方法,您可以创建一个新变量,以便您拥有一个列,其中所有3个组具有相同的值:

 data1$all <- "All"

然后将其用作行的group美学:

ggplot(data1, aes(x=group, y=estimate)) + 
    geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
        colour="black", width=.1, position=pd) +
    geom_line(aes(x=group, y=estimate, group=all)) + 
    geom_point(position=pd, size=4)

Mnel的答案可能更优雅,但如果这些组不是数字并且无法直接转换为数字,那么这可能会更好。

答案 2 :(得分:1)

您也可以查看第二个答案SO Question如果您正在努力实现更全面的实施,这可能会为您节省一些时间。