How to save a plot as image on disk from Viewer in RStudio?

highcharts, r, reporters

Solution

The answer turned out to be in the `webshot` package. @hrbrmstr provided the following code, which would be run at the end of the code I posted in the question:

# 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)

This saves the plot to the folder as an `html`, and then takes a picture of it, which is saved as a `png`.

I can then run the `ReporteRs` workflow by using `addImage(mydoc, "/tmp/out.png")`.

Problem

Summary: my ultimate goal is to use `rCharts`, and specifically `Highcharts`, as part of a `ReporteRs` PowerPoint report automation workflow. One of the charts I would like to use is rendered as html in the Viewer pane in Rstudio, and `addPlot(function() print(myChart))` does not add it to the PowerPoint. As a workaround, I decided to try to save `myChart` to disk, from where I could just add it to the PowerPoint that way. So my question is really, How do I get my html image into my `ReporteRs` workflow? Either getting it saved to a disk, or getting it to be readable by `ReporteRs` would solve my problem. This question is really the same as this one, but I'm using `rCharts`, specifically the example found here: ``` #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 ``` So if I try ``` > png(filename="~/Documents/name.png") > plot(myChart) Error in as.double(y) : cannot coerce type 'S4' to vector of type 'double' > dev.off() ``` I get that error. I've looked into Highcharts documentation, as well as many other potential solutions that seem to rely on Javascript and `phantomjs`. If your answer relies on `phantomjs`, please assume I have no idea how to use it. `webshot` is another package I found which is even so kind as to include an `install_phantomjs()` function, but from what I could find, it requires you to turn your output into a `Shiny` object first. My question is really a duplicate of this one, which is not a duplicate of this one because that is how to embed the html output in Rmarkdown, not save it as a file on the hard drive. I also found this unanswered question which is also basically the same. edit: as noted by @hrbrmstr and scores of others, radar charts are not always the best visualization tools. I find myself required to make one for this report.

Original source

Related problems