我希望最终用户能够导出使用Shiny构建和部署的.png的visNetwork图形。我可以通过在visExport
代码的末尾使用renderVisNetwork
行来实现这一点,但我不喜欢在输出中生成的按钮的外观,按钮本身会得到包含在导出的.png中,而.png本身的质量并不是那么好。我喜欢UI中downloadButton
生成的按钮的外观,但我在服务器端的downloadHandler
上做错了。在浏览器中运行时,我单击下载按钮,获取下载对话框,并能够保存文件,但文件为空(文件大小为318字节)。尝试.pdf也不起作用。这是我的代码:
ui.R:
downloadButton('ConDL', label='Download png')
server.R:
# Create network
ConNet <- function(){
visNetwork(Nodes(), Edges()) %>%
#all the other stuff to create the network which works fine
}
# Draw visualization - works fine
output$ConNet <- renderVisNetwork({
ConNet()
})
# Download png of visualization - no errors displayed in browser or
# console when testing, but exports blank png
output$ConDL <- downloadHandler(
filename="Con.png",
content= function(file) {
png(file)
ConNet()
dev.off()
}
)
我遵循了这里给出的关于使用函数而不是被动反应生成对象的建议:Downloading png from Shiny (R)。将前面提供的反馈信息转换为ConNet也无效。我正在浏览器(Firefox)中打开应用程序,而不是通过预览窗格运行。在内容部分尝试print(ConNet())
也无济于事,所以我不确定我缺少什么。
如果我可以在创建网络时让.png排除使用visInteraction
生成的导航按钮,那么可以获得奖励 - 它们对交互式部分非常有用,但会使静态图形混乱。