2016-09-20 4 views
2

Ich versuche, zwei Plots in derselben .jpg mit arrangeGrob() zu plattieren. Ich habe gerade angefangen, etwas über Grids und Grobs zu lernen und ich weiß, was das Problem ist: pheatmap ist ein Grid-Objekt und enthält grob-Objekte, die es mir nicht erlauben, es in arrayGrob zu platzieren. Ist das wahr?Verwenden einer Pheatmap in arrangeGrob

Würde ich irgendwie den qplot in ein Raster und die pheatmap in ein Raster legen und diese Raster dann in ein neues Raster legen?

library(grid) 
library(gridExtra) 
library(pheatmap) 
library(ggplot2) 
hmdat=rbind(c(1,2,3), 
      c(3,4,5), 
      c(5,6,7)) 
hm=pheatmap(hmdat) 
qp=qplot(1,1) 
lm=rbind(c(1,2,2), 
     c(1,2,2)) 
jpeg("plots.jpg") 
arrangeGrob(qp,hm, layout_matrix=lm) 
dev.off() 

Der obige Code-Schnipsel läuft ganz gut, wenn

arrangeGrob(qp,qp, layout_matrix=lm) 
+2

zu liefern Versuchen Sie 'arrangeGrob (qp, hm [[4]], layout_matrix = lm) '. Die Manualpage für 'pheatmap()' gibt im Abschnitt 'Values' eindeutig an, dass sie eine' liste' von Komponenten zurückgibt, aber sie erwähnt nicht die Komponente # 4, welche die 'gtable' des Plots ist. Sie müssen es speziell indizieren, da es nicht die 'print'-Methode-Suche/Ausführung von R für dieses Objekt innerhalb des Funktionsaufrufs auslöst. – hrbrmstr

+0

Das funktioniert perfekt, danke! Irgendwelche Vorschläge, wie ich die Lösung für mich selbst finden kann, wenn ich wieder mit dieser Art von Problem konfrontiert bin? Oder ist Listenwert 4 das Gtable nur eine Sache, die Sie irgendwie wissen müssen? Wenn Sie Ihre Lösung als Antwort eingeben, werde ich die Frage beantworten. – Xizam

Antwort

0

mit Ich bin nicht sicher, ob Sie 6 Zahlen haben wollte, oder Sie wollten als andere mit doppelt so breit beiden Figuren ein haben ein (ich habe versucht minimale Codeänderung zu tun):

library(grid) 
library(gridExtra) 
library(pheatmap) 
library(ggplot2) 
hmdat=rbind(c(1,2,3), 
      c(3,4,5), 
      c(5,6,7)) 
hm=pheatmap(hmdat) 
qp=qplot(1,1) 
lm=rbind(c(1,2,2), 
     c(1,2,2)) 
grid.arrange(grobs = list(qp,hm[[4]]), layout_matrix = lm) 

, die Sie: enter image description here

Als @hrbrmstr im Kommentar erwähnt, sollten Sie das 4. Element im Pheatmap-Objekt verwenden. Denken Sie auch daran, grobs als Liste an die grid.arrange

Verwandte Themen