请考虑以下事项:
# createPlot takes in data, processes it and generates a plot using native plot()
plotInput <- function(){
createPlot(data=data(),name=input$name)
}
# I render it using
output$plot <- renderPlot({
plotInput()
}, height=700,width=850,res=100)
# and I download the pdf using
output$pdflink <- downloadHandler(
filename <- "plot.pdf",
content <- function(file){
pdf("plot.pdf")
print(plotInput())
dev.off()
file.copy("plot.pdf", file)
}
)
createPlot
函数有一个randomising
因子,用一个小的随机伪计数填充空值。因此,无论何时运行此函数,绘图上的点都不完全相同,因此下载的绘图与我在界面上看到的略有不同。我能做些什么来解决这个问题?
我已经尝试将plotInput()
的输出存储到一个静态变量中,并为渲染和导出重新提取该变量,但它不会像这样工作。
mainPlot <- plotInput()
答案 0 :(得分:1)
不要让plotInput
成为一个函数,而是尝试将其变成&#34;被动&#34;。 Shiny应该检测到打印到文件时,如果没有任何输入发生变化,则无需重新运行被动反应,因此renderPlot和pdf应该使用相同的图
答案 1 :(得分:0)
我通过生成静态pdf图解决了它,我使用.png
转换为ImageMagick
并使用renderImage
# createPlot takes in data, processes it and generates a plot using native plot()
plotInput <- reactive({
createPlot(data=data(),name=input$name)
})
# I render it using
output$plot <- renderImage({
pdf("plot.pdf")
print(plotInput())
dev.off
# R wrapper for imagemagick
im.convert('plot.pdf',output='plot.png',extra.opts="-density 250 -quality 100")
list(src='plot.png',
contentType='image/png',
alt='emptyPlot')
},deleteFile=FALSE)
# and I download the pdf using
output$pdflink <- downloadHandler(
filename <- "plot.pdf",
content <- function(file){
file.copy("plot.pdf", file)
}
)