2016-04-21 20 views
3

Ich habe zwei ggplot2 Plots und ich möchte eine Reihe (10-100) leicht unterschiedliche Kurven zwischen ihnen zeichnen. Das heißt, ich habe ein Layout mit zwei Feldern und möchte Verbindungslinien vom linken zum rechten Diagramm zeichnen. Bisher habe ich versucht, dies zu tun, indem ich die Dinge in grobes verwandelt und das gtable-Paket benutzt, um Kurven hinzuzufügen.Fügen Sie mehrere Kurven zwischen ggplot2 Plots

Zur Veranschaulichung, ich habe so etwas wie:

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) 

ein Grundstück wie diese produziert:

output

die fast richtig ist, mit Ausnahme nur die letzten der curveGrob Objekte gezeigt. Ich habe versucht, mit dem Z-Index für die hinzugefügten Grob-Spiele herumzuspielen, und das letzte, das gezeichnet wurde, überschreibt immer die anderen. Ich möchte, dass mein Diagramm gleich aussieht, außer dass es alle 10 Kurven zwischen den beiden Diagrammbereichen anzeigen soll, anstatt nur die, die mit meinem vorhandenen Code angezeigt wird.

Also wie kann ich entweder meinen vorhandenen Code ändern, um alle 10 Kurven anzuzeigen, oder den gleichen Effekt erzielen, indem ich eine andere Methode verwende? Ich stehe mit ggplot2 für die Hauptdarstellungen fest, da sie wesentlich komplexer sind als das gezeigte Spielzeugbeispiel.

+0

Mögliche Duplikat [ggplot zwischen den Punkten über Facetten zeichnen Linie] in der gleichen Position sind (http://stackoverflow.com/questions/31690007/ggplot-drawing-line-zwischen-Punkten-über-Facetten) – jaimedash

+1

Ich glaube nicht, dass es ein Duplikat ist, denn das Problem hier ist, mehrere Kurven groabs zu erhalten, wenn sie gleichzeitig l, r, b und t Koordinaten. Tatsächlich funktioniert dies in der for-Schleife: 'gt = gtable_add_grob (gt, curveGrob (0,0,5,1,0,5, ncp = 5, Quadrat = FALSE, Krümmung = i/10), l = 5, r = 8, b = 3, t = 3 + 1/11). Ich bin mir nicht sicher, warum die t-Position leicht verändert wird und der ursprüngliche Code nicht funktioniert. Es ist kein Clipping-Problem AFAICT. – eipi10

Antwort

2

gtable will eindeutige Namen für Grobs die

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

Ich weiß nicht, wie du das herausgefunden hast, aber das hat mein Problem genau gelöst. Vielen Dank! – user1356855

Verwandte Themen