2017-12-19 2 views
1

Ich bin neu zu rmarkdown und ich würde gerne eine Handlung zeigen, die normalerweise in einem neuen Fenster produziert wird. Dieser Plot wird von einer Funktion aufgerufen, die ihn in einem neuen Fenster mit plot.new() und dev.new() anzeigt und außerdem mehrere Plots in diesem Fenster hinzufügt. Wie kann ich das zum Bericht zurückgeben?Anzeige Plot von neuen Fenster Plot in Rmarkdown

Folgenden werden die Parzellen nicht zurück ...

```{r fig.keep='all', fig.width=10, fig.height=5} 

Draw_matrix_plots(data) 

``` 

und die Funktion Skelett Ich bin Aufruf welcher zieht vier Parzellen in einem neuen Fenster:

Draw_matrix_plots <- function(data){ 
    plot.new() 
    dev.new(width=7, height=8) 
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE),heights=c(3,3)) 
    hist(data$A) 
    hist(data$B) 
    hist(data$C) 
    hist(data$D) 
} 

Dank

+0

Hallo, ist das eine benutzerdefinierte Funktion? Oder ein Beispiel aus einem Paket? Für einige grafische Objekte (ggplot) können Sie drucken. Wenn Sie in Sweave arbeiten, können Sie Ihre Diagramme mit 'grDevices :: savePlot (" myplot.png ", type =" png ") speichern und dann mit \ includegraphics aufrufen. Hier ist ein [Beispiel] (https://stackoverflow.com/questions/46920038/how-to-get-figure-floated-surrounded-by-text-etc-in-r-markdown/46962362#46962362) zum Einschließen eine Figur in einem der Ordner gespeichert. – Cedric

+0

Hier ist eine einfachere Möglichkeit für Markdown https://stackoverflow.com/questions/10517020/how-to-import-local-image-using-knitr-for-markdown – Cedric

+0

Ja, es ist eine benutzerdefinierte Funktion, die normalerweise meine Daten und erstellt mehrere Plots in einem neuen Fenster. Ich würde es lieber nicht als PNG speichern (wenn möglich), sondern es direkt so anzeigen, wie Sie es normalerweise mit einem einzelnen Plot im Hauptfenster tun würden. Ich habe die Frage bearbeitet, um ein Skelett der Funktion zu zeigen. Danke –

Antwort

0

I denke, dass du einfach nicht das dev.new() brauchst, den folgenden Code produzierst

--- 
title: "Test" 
ouptut: pdf_document 
--- 

# R code 

```{r fig.keep='all', fig.width=10, fig.height=5} 
Draw_matrix_plots <- function(){ 
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE),heights=c(3,3)) 
    hist(rnorm(100)) 
    hist(rnorm(100)) 
    hist(rnorm(100)) 
    hist(rnorm(100)) 
} 
Draw_matrix_plots() 

``` 

test Sie können überprüfen, ob die Abbildungen im Ordner/Figure erstellt wurden. Ich habe das gleiche mit html_document als Ausgabe. Hilft das ?

+0

danke für das Follow-up. Alle Ihre Optionen sind gut als Arbeit und sind eine große Hilfe. Speichern Sie es entweder zuerst als Bild oder entfernen Sie das dev.new. Sie arbeiten beide. Idealerweise möchte ich aber gerne das neue Fenster und nicht das Arbeitsfenster erfassen: /. denn wenn ich meinen Code benutze, müsste ich vor jedem Funktionsaufruf den neuen.dev hinzufügen ... Oder ist es eine schlechte Übung, den dev.new in meine Funktion zu stellen? Auch wegen der plot.new, die ich hatte, fügt es eine leere Grafik zur Liste der Bilder hinzu:/.. –

+0

Wenn Sie plot.default aufrufen, ruft es zuerst die 'plot.new()' oder 'frame()' Funktion. Dieser wird das Plot-Gerät, in dem Sie sich befinden, finalisieren und die Grafikgeräte zu einem neuen Grafikrahmen weiterleiten. In den meisten Fällen wird R das für Sie erledigen und Sie werden dev.new() nicht benötigen. Was [knitr tut] (https://github.com/yihui/knitr/releases/download/doc/knitr-manual.pdf) ist, im Code zu testen, wenn Sie Plots haben, und sie dann als Bilder zu speichern (genau wie wir haben es manuell gemacht). Mit der Option "dev" im Chunk können Sie auswählen, welcher Typ von Grafikgerät geöffnet werden soll. – Cedric

+1

Am Ende habe ich das dev.new in meinen Funktionen entfernt. Wenn ich die Ergebnisse außerhalb des normalen R-Studio-Fensters haben möchte, muss ich es manuell mitteilen. Ich bin es gewohnt, mehrere Fenster geöffnet zu haben, um sie zu vergleichen, aber ich kann es immer manuell machen oder mit den ersten Pfeilen nach links oder rechts gehen. So funktioniert es gut für Knitr und ich denke, es könnte tatsächlich besser sein. Wenn jemand vorbeigeht und eine Lösung hat, um es aus dem neuen Fenster zu extrahieren, fülle bitte frei, um eine Antwort hinzuzufügen :). Für jetzt bin ich gut mit dieser Antwort. Danke :: thumb_up :: –