同时在静态函数上使用 downloadHandler 和 renderPlot
using downloadHandler and renderPlot on a static function simultaneously
请考虑以下事项:
# 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()
与其将 plotInput
设为函数,不如将其设为 "reactive"。 Shiny 应该检测到当打印到文件时,如果 none 的输入已经改变,则不需要重新运行反应,因此 renderPlot 和 pdf 应该使用相同的 plot
我通过生成静态 pdf 图解决了这个问题,我使用 ImageMagick
将其转换为 .png
,并使用 renderImage
[=14= 将转换后的图像渲染到浏览器]
# 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)
}
)
请考虑以下事项:
# 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()
与其将 plotInput
设为函数,不如将其设为 "reactive"。 Shiny 应该检测到当打印到文件时,如果 none 的输入已经改变,则不需要重新运行反应,因此 renderPlot 和 pdf 应该使用相同的 plot
我通过生成静态 pdf 图解决了这个问题,我使用 ImageMagick
将其转换为 .png
,并使用 renderImage
[=14= 将转换后的图像渲染到浏览器]
# 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)
}
)