使用 Shiny (R) 中的 downloadHandler 将 visNetwork 导出为 png 会产生空白文件
Exporting visNetwork to png with downloadHandler in Shiny (R) yields blank file
我希望最终用户能够导出使用 Shiny 构建和部署的 visNetwork 图形的 .png。我可以通过在我的 renderVisNetwork
代码末尾使用 visExport
行来做到这一点,但我不喜欢输出中生成的按钮的外观,按钮本身得到包含在导出的 .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
生成的导航按钮,那就更好了 - 它们对交互部分很有用,但会使静态图形混乱。
我不明白你的问题。这可以帮助您 download network from shiny API
我希望最终用户能够导出使用 Shiny 构建和部署的 visNetwork 图形的 .png。我可以通过在我的 renderVisNetwork
代码末尾使用 visExport
行来做到这一点,但我不喜欢输出中生成的按钮的外观,按钮本身得到包含在导出的 .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
生成的导航按钮,那就更好了 - 它们对交互部分很有用,但会使静态图形混乱。
我不明白你的问题。这可以帮助您 download network from shiny API