ggplot-Plots in Skripten werden in Rstudio nicht angezeigt

82

Ich habe ein seltsames Problem mit Rstudio: Wenn ein Skript ggplot2-Funktionen aufruft, um ein Diagramm anzuzeigen, werden die Diagramme nicht verwendet, wenn Source zum Ausführen des Skripts verwendet wird. Wenn ich das ganze Skript wählen mit Ctrl+A, dann starten die aktuelle Zeile oder Auswahl ( Ctrl+Enter), dann ist die Handlung tut Anzeige. Ebenso führt die Eingabe von Plotbefehlen in die Konsole zu einer korrekten Ausgabe.

Zum Beispiel:

library(ggplot2)

p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()

Erzeugt nur eine Ausgabe, wenn sie in die Konsole eingefügt wird, nicht wenn sie bezogen wird.

Es gibt andere Fragen dazu, aber keine ist hilfreich:

Wie kann ich Rstudio dazu bringen, Diagramme anzuzeigen, wenn ein Skript bezogen wird? Ich benutze Rstudio 0.98.1062 und R 3.1.1.

Superbest
quelle

Antworten:

128

Die Lösung besteht darin, das print()ggplot-Objekt explizit aufzurufen :

library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)

ggplotFunktion gibt Objekt der Klasse ggplot zurück; ggplot2 funktioniert durch Überladen der printFunktion, um sich bei Objekten der Klasse ggplot anders zu verhalten. Anstatt sie in STDOUT zu drucken, wird ein Diagramm erstellt.

Im interaktiven Modus funktioniert alles gut, da R davon ausgeht, dass die meisten Befehle über die print()Funktion ausgeführt werden. Dies dient unserer Bequemlichkeit und ermöglicht es uns, rnorm(1)sichtbare Ausgaben einzugeben und zu erhalten. Wenn der Befehl Aktuelle Auswahl Ctrl+Enterausführen verwendet wird ( ), verhält sich RStudio so, als ob jede ausgewählte Zeile im interaktiven Modus eingegeben und ausgeführt worden wäre. Sie können dies überprüfen, indem Sie Ihren Befehlsverlauf im Bereich überprüfen, Consolenachdem Sie einige ausgewählte Zeilen ausgeführt haben.

Dieser bequeme Modus wird jedoch abgebrochen, wenn die Datei von gelesen wird source(). Da mit dieser Funktion (möglicherweise lange und rechenintensive) R-Skripte ausgeführt werden sollen, ist es unerwünscht, STDOUT mit Nachrichten mit niedriger Priorität zu verschmutzen. Aus diesem Grund source()wird standardmäßig nur eine Fehlermeldung ausgegeben. Wenn Sie etwas anderes wollen, müssen Sie explizit danach fragen.

Mirek Długosz
quelle
20

obwohl es eine ziemlich alte Frage ist. Ich hatte das gleiche Problem und fand eine schnelle Lösung, wenn Sie die Schaltfläche "Quelle" im Bearbeitungsfeld von R Studio verwenden möchten.

Sie können einfach "Quelle mit Echo" einschalten (Strg + Umschalt + Eingabetaste) und das Diagramm wird wie erwartet angezeigt

bcat
quelle
1
Großartig, wusste das nicht! Das ergänzt die Erklärung von @ Mirosław Zalewski.
Uwe
9

Ich bin kürzlich auf diese Frage gestoßen und habe festgestellt, dass es am aktuellsten ist, show(p)nach dem Erstellen des Plots anzurufen .

Superbest
quelle
Haben Sie Quellen, aus denen hervorgeht, dass dies der aktuellste Weg ist? Alles was ich finden kann ist folgendes: ggplot2.tidyverse.org/reference/print.ggplot.html
Chris
0

Ich habe diese Frage bei der Suche nach einem ähnlichen Problem gefunden (Diagramme werden in RStudio nicht angezeigt). Ich habe versucht, einen komplizierten ggplot2-Block zu beheben, indem ich ihn in Teilen ausgeführt habe, konnte jedoch nichts im Plotfenster anzeigen.

Grund: Die tiff()Funktion, die ich zuvor geöffnet habe, wurde nicht geschlossen.

Lösung: Ich habe dev.off()einige Male ausgeführt, bis alle meine früheren tiff()Funktionen abgeschlossen waren. Dann konnte ich Diagramme in RStudio erstellen und die Ergebnisse im Diagrammfenster anzeigen.

Tania
quelle