如何在RStudio中的Viewer中将图形保存为磁盘上的图像?

时间:2016-10-20 16:47:58

标签: r highcharts reporters

摘要:我的最终目标是使用rCharts,特别是Highcharts,作为ReporteRs PowerPoint报告自动化工作流程的一部分。我想使用的其中一个图表在Rstudio的“查看器”窗格中呈现为html,而addPlot(function() print(myChart))不会将其添加到PowerPoint中。作为一种解决方法,我决定尝试将myChart保存到磁盘,从那里我可以将其添加到PowerPoint中。

所以我的问题确实是,如何将我的html图像放入我的ReporteRs工作流程?将其保存到磁盘,或者让它可以被{{1会解决我的问题。

此问题与this one非常相似,但我使用ReporteRs,特别是找到的示例here

rCharts

所以,如果我尝试

#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

我收到了这个错误。

我已经查看Highcharts documentation以及many other potential solutions,它们似乎依赖于Javascript和{{1} }。如果您的答案依赖> png(filename="~/Documents/name.png") > plot(myChart) Error in as.double(y) : cannot coerce type 'S4' to vector of type 'double' > dev.off() ,请假设我不知道如何使用它。 phantomjs是我发现的另一个包,它甚至包含phantomjs函数,但是根据我的发现,它要求您首先将输出转换为webshot对象。

我的问题实际上是this one的重复,不是this one的副本,因为这是如何在Rmarkdown中嵌入html输出,而不是将其保存为硬盘上的文件。

我还发现this unanswered question也基本相同。

编辑:正如@hrbrmstr及其他许多人所说,雷达图并不总是最好的可视化工具。我发现自己需要为此报告制作一个。

1 个答案:

答案 0 :(得分:4)

答案原来是在webshot包中。 @hrbrmstr提供了以下代码,它将在我在问题中发布的代码的末尾运行:

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

这会将情节作为html保存到文件夹,然后拍摄照片,并保存为png

然后,我可以使用ReporteRs运行addImage(mydoc, "/tmp/out.png")工作流程。