3

私は 2 つの ggplot2 プロットを持っており、シリーズ (10-100) のわずかに異なる曲線を描画したいと考えています。つまり、2 パネル レイアウトを使用し、左側のプロットから右側のプロットに接続線を引きたいと考えています。これまでのところ、物事をグロブに変換し、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 オブジェクトの最後の部分だけが表示されています。追加されたグロブの z-index をいじってみましたが、プロットされた最後のグロブは常に他のグロブを上書きします。既存のコードで表示されている 1 つの曲線だけではなく、2 つのプロット領域間に 10 個の曲線すべてを表示する必要があることを除いて、プロットを同じに見せたいです。

では、既存のコードを変更して 10 個の曲線すべてを表示するか、別の方法を使用して同じ効果を得るにはどうすればよいでしょうか? 主なプロットは、示されているおもちゃの例よりもかなり複雑であるため、ggplot2 を使用して立ち往生しています。

4

1 に答える 1

2

gtable は、同じ位置にあるグロブに一意の名前が必要です

  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))

ここに画像の説明を入力

于 2016-04-22T02:13:46.700 に答える