2010-03-30 4 views
25

ich innerhalb einer Funktion in R mehr Grafikfenster, um laichen möchte mit ggplot Grafiken ...generieren mehrere Grafiken innerhalb einer R-Funktion

testf <- function(a, b) { 
    devAskNewPage(TRUE) 
    qplot(a, b); 
    # grid.newpage(recording = TRUE) 
    dev.new() 
    qplot(a, a+a); 
    # grid.newpage(recording = TRUE) 
    dev.new() 
    qplot(b, b+b); 
} 

library(ggplot2) 

x <- rnorm(50) 
y <- rnorm(50) 
testf(x, y) 

jedoch weder dev.new() noch Gitter. newpage() scheint das vorhergehende Diagramm zu löschen.

Ich weiß, dass in R normalerweise Funktionen nur die letzte Sache, die sie auswerten produzieren, aber ich möchte den Prozess besser verstehen und von möglichen Problemumgehungen lernen.

Gedanken?

+1

Vielleicht R FAQ 7.22 http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f – rcs

+0

@rcs Ihr Kommentar beantwortet die Frage. Schreiben Sie es als Antwort, damit es akzeptiert werden kann. –

+0

rcs Kommentar suggerieren, dass jemand keine FAQ liest;) – Marek

Antwort

24

Die Raster -basierte Grafikfunktionen in Gitter und ggplot2 erstellen ein Diagrammobjekt, aber nicht angezeigt. Die print() Verfahren zur Diagrammobjekt erzeugt die tatsächliche Anzeige, d.h.

print(qplot(x, y)) 

das Problem löst.

Siehe R FAQ 7.22.

+1

Ihr Rat ist richtig, aber es hat nichts wirklich mit Raster zu tun - es ist nur eine Entscheidung für den Programmierstil. – hadley

+4

+1: Das hat mich für 30 Minuten ratlos gemacht. Diese Frage ist so wichtig, dass es sich lohnt, sie zu reproduzieren: *** "Eine print() - Methode für das Graph-Objekt ist erforderlich, um eine tatsächliche Anzeige zu erzeugen. Wenn Sie (ggplot2, grid, etc.) interaktiv in der Befehlszeile verwenden, wird Das Ergebnis wird automatisch gedruckt, aber in source() oder innerhalb Ihrer eigenen Funktionen benötigen Sie eine explizite print() -Anweisung. "*** – smci

+0

http://cran.r-project.org/doc/FAQ/R-FAQ. html # Warum-do-gitter_002ftrellis-graphics-not-work_003f – marbel