2016-10-20 1 views
2

Zusammenfassung: Mein ultimatives Ziel ist es, rCharts, und speziell Highcharts, als Teil eines ReporteRs PowerPoint-Bericht Automatisierung Workflow. Eines der Diagramme, das ich verwenden möchte, wird im Viewer-Fenster in Rstudio als HTML gerendert, und addPlot(function() print(myChart)) fügt es nicht dem PowerPoint hinzu. Als Workaround habe ich mich entschieden, myChart auf die Festplatte zu speichern, von wo aus ich es einfach auf diese Weise zum PowerPoint hinzufügen könnte.Wie kann ein Plot als Bild auf der Festplatte vom Viewer in RStudio gespeichert werden?

Also meine Frage ist wirklich, Wie bekomme ich meine HTML-Bild in meine ReporteRs Workflow? Entweder es auf eine Festplatte zu speichern, oder es von ReporteRs lesen zu bekommen würde mein Problem lösen.

Diese Frage ist wirklich die gleiche wie this one, aber ich bin rCharts verwenden, speziell das Beispiel here gefunden:

#if the packages are not already installed 
install.packages('devtools') 
require(devtools) 
install_github('rCharts', 'ramnathv') 

#code creates a radar chart using Highcharts 
library(rCharts) 
#create dummy dataframe with number ranging from 0 to 1 
df<-data.frame(id=c("a","b","c","d","e"),val1=runif(5,0,1),val2=runif(5,0,1)) 
#muliply number by 100 to get percentage 
df[,-1]<-df[,-1]*100 

myChart <- Highcharts$new() 
myChart$chart(polar = TRUE, type = "line",height=500) 
myChart$xAxis(categories=df$id, tickmarkPlacement= 'on', lineWidth= 0) 
myChart$yAxis(gridLineInterpolation= 'circle', lineWidth= 0, min= 0,max=100,endOnTick=T,tickInterval=10) 
myChart$series(data = df[,"val1"],name = "Series 1", pointPlacement="on") 
myChart$series(data = df[,"val2"],name = "Series 2", pointPlacement="on") 
myChart 

Also, wenn ich

> png(filename="~/Documents/name.png") 
> plot(myChart) 
Error in as.double(y) : 
    cannot coerce type 'S4' to vector of type 'double' 
> dev.off() 

versuche ich, diesen Fehler zu bekommen.

Ich habe in Highcharts documentation sah, sowie manyotherpotentialsolutions, die auf Javascript und phantomjs zu verlassen scheinen. Wenn Ihre Antwort auf phantomjs beruht, nehmen Sie bitte an, dass ich keine Ahnung habe, wie ich sie verwenden soll. webshot ist ein anderes Paket, das ich gefunden habe, das sogar so nett ist, eine install_phantomjs() Funktion einzuschließen, aber von was ich finden konnte, erfordert es Sie, Ihre Ausgabe in ein Objekt zuerst zu machen.

Meine Frage ist wirklich ein Duplikat this one, die nicht ein Duplikat this one ist, weil das ist, wie die HTML-Ausgabe in Rmarkdown einzubetten, nicht als Datei auf der Festplatte speichern.

Ich fand auch this unanswered question, die auch im Grunde das gleiche ist.

edit: wie von @hrbrmstr und anderen Punkten bemerkt, sind Radar-Diagramme nicht immer die besten Visualisierungs-Tools. Ich finde mich verpflichtet, einen für diesen Bericht zu machen.

+0

Verwenden Sie das Paket 'webshot'. Es gibt Beispiele, wie man das auf SO macht, aber es ist ziemlich einfach: 'myChart $ save ("/tmp/rcharts.html "); webshot :: webshot ("/ tmp/rcharts.html", Datei = "/ tmp/out.png", Verzögerung = 2) '. Aber warum nicht einfach das "Radarchart" -Paket verwenden? – hrbrmstr

+0

'webshot' verwendet' phantomjs'. Ich habe keine "Radarecharge" -Ausgabe gesehen, die gut aussah. Ich habe gerade gesehen, dass ein Fehler, den ich mit 'ggradar' hatte, behoben wurde, damit ich zurückgehen und dieses Paket ausprobieren kann. – BLT

+0

Ja, es verwendet phantomjs und es _actually has_ ​​eine 'install_phantomjs()' -Funktion (müssen Hilfe-Seiten lesen).Soweit Radarkarten (sie sind in der Regel schreckliche Visualisierung Entscheidungen) 'fsmb :: radarchart()' [macht keine schlechte Arbeit] (https://www.dropbox.com/s/agmc0peh2xywky9/Picture1.png ? dl = 1) und ich finde es unendlich viel besser (visuell ansprechender) als rCharts (dh die, die dieser Post erzeugt), aber es gibt viel bessere vis Auswahlmöglichkeiten IMO. – hrbrmstr

Antwort

1

Die Antwort entpuppte sich als webshot Paket. @hrbrmstr vorgesehen, um den folgenden Code, der am Ende des Codes ausgeführt wird, würde ich in der Frage gestellt:

# If necessary 
install.packages("webshot") 
library(webshot) 
install_phantomjs() 

# Main code 
myChart$save("/tmp/rcharts.html") 
webshot::webshot("/tmp/rcharts.html", file="/tmp/out.png", delay=2) 

Das die Handlung als html in den Ordner speichert, und nimmt dann ein Bild davon, was wird als png gespeichert.

Ich kann dann den ReporteRs Workflow mit addImage(mydoc, "/tmp/out.png") ausführen.

Verwandte Themen