2016-04-21 48 views
3

我有兩個ggplot2圖,我想在它們之間繪製一系列(10-100)略微不同的曲線。也就是說,我將有一個雙面板佈局,並希望從左側的情節向右側的情節繪製連接線。到目前爲止,我已經嘗試通過將事物轉換爲grob's並使用gtable包來添加曲線。在ggplot2圖之間添加多條曲線

爲了說明這一點,我有這樣的:

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) 

生產的情節是這樣的:

output

這幾乎是正確的,但只有最後的curveGrob對象的顯示。我已經嘗試使用z-index來增加grobs,而最後一個繪製的總是會覆蓋其他的。我希望我的情節看起來是一樣的,只是它應該顯示兩個情節區域之間的所有10條曲線,而不是僅顯示現有代碼所顯示的那條曲線。

那麼我該如何修改我現有的代碼來顯示所有10條曲線,或者使用不同的方法實現相同的效果?我被困在使用ggplot2的主要情節,因爲它們比所示的玩具例子複雜得多。

+0

的可能的複製[ggplot,拉絲面兩端點之間的線路(http://stackoverflow.com/questions/31690007/ggplot-drawing-line-between-points-across-facets) – jaimedash

+1

我不認爲它是重複的,因爲這裏的問題是在相同的l,r,b和t座標。事實上,這在for循環中起作用:'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 + I/11)'。我不確定爲什麼略微改變t位置,而原始代碼沒有。這不是剪報問題AFAICT。 – eipi10

回答

2

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

enter image description here

+0

我不知道你是如何解決這個問題的,但是這完全解決了我的問題。謝謝! – user1356855