在 ggplot2 图之间添加多条曲线

Add multiple curves between ggplot2 plots

我有两个 ggplot2 图,我想在它们之间绘制一系列 (10-100) 略有不同的曲线。也就是说,我将有一个双面板布局,并希望绘制从左侧图到右侧图的连接线。到目前为止,我已经尝试通过将事物转换为 grob 并使用 gtable 包添加曲线来做到这一点。

为了说明,我有这样的东西:

library(ggplot2)
library(gtable)
library(grid)
library(gridExtra)
p1 = ggplot(data.frame(x=1:10,y=1:10),aes(x=x,y=y))+geom_point()
p2 = ggplot(data.frame(x=1:10,y=1:10),aes(x=x,y=y))+geom_point()
g1 = ggplotGrob(p1)
g2 = ggplotGrob(p2)
gt = gtable:::cbind.gtable(g1,g2,size='first')
gt$heights = unit.pmax(g1$heights,g2$heights)
for(i in 1:10) {
  gt = gtable_add_grob(gt,curveGrob(0,0.5,1,0.5,ncp=5,square=FALSE,curvature=i/10),l=5,r=8,b=3,t=3)
}
grid.newpage()
grid.draw(gt)

制作这样的情节:

这几乎是正确的,只是只显示了最后一个 curveGrob 对象。我试过为添加的 grobs 使用 z-index,最后一个绘制的总是覆盖其他的。我希望我的绘图看起来一样,除了它应该显示两个绘图区域之间的所有 10 条曲线,而不是仅显示我现有代码的曲线。

那么我该如何修改我现有的代码以显示所有 10 条曲线或使用不同的方法达到相同的效果?我坚持使用 ggplot2 作为主要情节,因为它们比显示的玩具示例复杂得多。

gtable 需要相同位置的 grobs 的唯一名称

  gt = gtable_add_grob(gt,curveGrob(0,0.5,1,0.5,ncp=5,square=FALSE,curvature=i/10),
            l=5,r=8,b=3,t=3, name=paste(i))