在 Adding individual arrows in multiple plots 我描述了一个问题,由于math.coffee已经解决了。
我的问题是如何只向一个方面添加一个箭头。最近我安装了新版本的R:
平台i386-pc-mingw32
version.string R版本2.14.2(2012-02-29)ggplot2_0.9.0
以下是代码示例
# data frame
xdf <- data.frame(x=rep(1:10,2)
,y=c( 2*c(1:10)+rnorm(10,0,3), 4*c(1:10)+rnorm(10,0,5))
,z=rep(c("A","B"),each=10)
)
xdf
# plot
ggplot with faceting
xp <- ggplot(xdf,aes(x=x,y=y)) +
geom_line() +
facet_grid(. ~ z)
xp
# location of the arrow: x=4, y=y+1 on the top of the first facet (A)
(f1x4 <- xdf[4,"y"]+1)
# add arrow and label
xp + geom_segment(aes(x=4,xend=4,y=f1x4+3,yend=f1x4,z='A') # <-- see the z='A'
, arrow=arrow(length=unit(0.4,"cm")
)
) +
geom_text(aes(x=4,y=f1x4+5, label="a",z='A')) # <-- see the z='A'
应该发生什么:箭头只应在小平面A上创建。 会发生什么:箭头在A面和B面上创建。
有谁知道如何解决这个问题?
答案 0 :(得分:1)
显然在更新R和ggplot后发生了变化。坐标数据必须与数据帧一起传送。以下是一个附加分组的示例:
xdf <- data.frame(x=rep(1:10,each=4)
,y=rep(1:10,each=4)*rep(1:4,10) +rnorm(40,0,1)
,g=rep(c("R","S"),20)
,z=rep(c("A","A","B","B"),10)
)
head(xdf)
# plot
xp <- ggplot(xdf,aes(x=x,y=y, group=g)) +
geom_line() +
facet_grid(. ~ z)
xp
# location of the arrow: x=4, y=y+1 on the top of the first facet (A)
(f1x4 <- subset(xdf,x==4 & g=="R" & z=="A")$y)
arrdf <- data.frame(x = 4, y = f1x4, z = "A", g = "R") # create new data.frame for annotations
# add arrow and label
xp + geom_segment(data=arrdf,aes(x=x,xend=x,y=y+3,yend=y,z=z,g=g) # <-- see the z='A'
, arrow=arrow(length=unit(0.4,"cm")
)
) +
geom_text(data=arrdf,aes(x=x,y=y+4, label="a",z=z, g=g))