2016-05-26 10 views
4

Ist es möglich, zwei dygraph s im RStudio Viewer-Fenster gleichzeitig anzuzeigen?zwei dygraph in RStudio Viewer-Bereich

Ich aktualisiere eine alte Funktion, die zwei Zeitreihendiagramme (mit ggplot2) erstellt, übereinander gestapelt (mit gridExtra::grid.arrange(ggp1, ggp2)). Ich möchte die coole dygraph verwenden und die Änderung ist ziemlich einfach, ..., außer dass ich beide Diagramme gleichzeitig in RStudio Viewer anzeigen möchte.

Es ist möglich, jeweils ein Diagramm gleichzeitig anzuzeigen. In der Tat, "If you call dygraph within RStudio then it’s output appears within the Viewer pane". Aber ich konnte keinen Trick finden, um beide Plots gleichzeitig anzuzeigen. Und ich will das, weil ich das handliche synchronization Feature von dygraph

verwenden möchte, um ein reproduzierbares Beispiel zu geben, hier ist ein Beispiel dafür, was ich tue.

library(dygraphs) 
dygraph(mdeaths, group = "ensync") 
dygraph(fdeaths, group = "ensync") 

Aber jeder von ihnen ist ein neuer Anruf in R-Konsole und dann das erste Grundstück auf dem Viewer angezeigt und sofort die zweite Handlung ersetzt es.

Die einzige Problemumgehung, die ich gefunden habe, ist es in ein RMarkdown Dokument zu bringen und alles zu knacken. Aber ich mag diesen Ansatz nicht. Es wäre bequemer, wenn ich es direkt im RStudio Viewer-Fenster anzeigen würde.

Irgendwelche Ideen?

+1

vielleicht glänzend mit einer anderen Registerkarte für jeden dygraph verwenden – MLavoie

+0

danke, ja, 'shiny' ist eine Option.Ich verwende derzeit "rmarkdown", um mein Problem zu lösen. Ich lege den Code für die 'dygraphs' in eine .Rmd-Datei und dann von meinem Code-Aufruf' rmarkdown :: render() 'und sende dann die Ausgabedatei an 'redudioapi :: viewer()'. Hinweis: Die Ausgabedatei muss sich "im temporären R-Sitzungsverzeichnis befinden"? Rstudioapi :: viewer – elikesprogramming

+0

Wenn Sie rmarkdown verwenden, werfen Sie einen Blick auf http://rmarkdown.rstudio.com/flexdashboard/index.html – MLavoie

Antwort

0

Nicht vertraut mit dygraphs, aber hier ist eine alternative Lösung Zoo mit und plotly Pakete

(i) Zoo Verwenden TS-Klasse Objekte in ein kombiniertes data.frame

library(zoo) 
m.dat <- data.frame(date=as.Date(as.yearmon(time(mdeaths))), Deaths=as.matrix(mdeaths), Sex="M") 
f.dat <- data.frame(date=as.Date(as.yearmon(time(fdeaths))), Deaths=as.matrix(fdeaths), Sex="F") 
dat <- rbind(m.dat, f.dat) 

(ii) Plot zu transformieren eine kombinierte data.frame mit ggplot2

p <- ggplot(dat, aes(x=date, y=Deaths, group=Sex, colour=Sex)) + geom_line() 

enter image description here

(iii) Verwenden Sie plotly :: ggplotly die Grafik in einer interaktiven Grafik

library(plotly) 
ggplotly(p) 

Hier ist ein Screenshot von Vergleichen Ansicht eines Datenpunktes zu transformieren.

enter image description here

+0

danke, ..., ich habe 'plotly' nicht benutzt, um meine' ggplot2' zu konvertieren, weil ich eigentlich zwei Plots brauche und nicht die zwei Zeilen in einem Plot (verschiedene Skalen, die 'ggplot2' nicht auf dem gleichen Plot anzeigen kann - zB sekundäre Achse -). Also kombiniere ich die beiden Plots mit 'gridExtra :: grid.arrange()', aber 'plotly' behandelt diese Art von Sache nicht gut. Nach meiner Erfahrung behandeln Sie auch die Facetten von ggplot nicht gut. – elikesprogramming

6

Mit htmltools Paket, legen die beiden dygraph s in einem tagList und verwenden Sie die browsable() Funktion beide Graphen im Viewer zu zeichnen:

library(dygraphs) 
library(htmltools) 

browsable(
    tagList(
    dygraph(mdeaths, group = "ensync", height = 200, width = "100%"), 
    dygraph(fdeaths, group = "ensync", height = 200, width = "100%") 
    ) 
) 

Vielleicht ist der Code besser lesbar mit dem magrittr Vorwärmer:

library(dygraphs) 
library(htmltools) 
library(magrittr) 

dygraph(mdeaths, group = "ensync", height = 200, width = "100%") %>% 
    tagList(dygraph(fdeaths, group = "ensync", height = 200, width = "100%")) %>% 
    browsable() 
0

Ich kann bestätigen, dass der Ansatz von Romles für mich in RStudio funktioniert, obwohl die Plots scheinbar so groß sind, dass sie sowohl vertikale als auch horizontale Bildlaufleisten benötigen, um sie vollständig anzeigen zu können. Daher gibt es vermutlich irgendwo eine Dimensionierungsoption, die auf den meisten Monitoren aufgerufen werden muss.

+0

Sie können die 'dygraph'-Plotdimensionen mit den Argumenten * width * und * height * ändern. – algoquant