【发布时间】:2017-02-10 05:05:07
【问题描述】:
我使用 ggplot2 facet 在一个列中绘制了两个面板,并想在 x = 4 和 8 处在面板上添加两条垂直线。以下是代码:
library(ggplot2)
library(gtable)
library(grid)
dat <- data.frame(x=rep(1:10,2),y=1:20+rnorm(20),z=c(rep("A",10),rep("B",10)))
P <- ggplot(dat,aes(x,y)) + geom_point() + facet_grid(z~.) + xlim(0,10)
Pb <- ggplot_build(P);Pg <- ggplot_gtable(Pb)
for (i in c(4,8)){
Pg <- gtable_add_grob(Pg, moveToGrob(i/10,0),t=8,l=4)
Pg <- gtable_add_grob(Pg, lineToGrob(i/10,1),t=6,l=4)
}
Pg$layout$clip <- "off"
grid.newpage()
grid.draw(Pg)
以上代码修改自:ggplot, drawing line between points across facets。 还有。
这个图有两个问题。首先,只显示了一条垂直线。 moveToGrob 似乎只工作了一次。其次,显示的行在 x = 4 处不准确。我没有找到 Pb$panel$ranges 变量,那么有没有办法也可以更正范围?非常感谢。
【问题讨论】:
-
ggplot(dat,aes(x,y)) + geom_point() + facet_grid(z~.) + xlim(0,10) + geom_vline(xintercept = c(4, 8)) -
@alistaire 也许您应该将此添加为答案,因为您的解决方案应该修复/回答 OP。