在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?
答案 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)
如果您group
group
,则geom_line
只有一个值可以创建一行,因此会显示错误消息。如果ggplot
将x
或y
映射变量视为一个因素,则会出现同样的错误 - 这是因为如果将变量编码为因子R(和ggplot)将认为它们是独立的群体,而不是连接点 - 这是合理的默认行为。
这将与字母因子标签一起使用,因为R
内部编码因子的方式(即as.numeric(factor)返回的数字不是因子标签)
ie.e
将群组更改为a
,b
,c
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)
答案 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如果您正在努力实现更全面的实施,这可能会为您节省一些时间。