【问题标题】:Exporting visNetwork to png with downloadHandler in Shiny (R) yields blank file在 Shiny (R) 中使用 downloadHandler 将 visNetwork 导出为 png 会产生空白文件
【发布时间】:2017-08-13 13:15:23
【问题描述】:

我希望最终用户能够导出使用 Shiny 构建和部署的 visNetwork 图形的 .png。我可以通过在 renderVisNetwork 代码末尾使用 visExport 行来做到这一点,但我不喜欢在输出中生成的按钮的外观,按钮本身包含在导出的.png,而 .png 本身的质量并不是那么好。我喜欢 UI 中 downloadButton 生成的按钮的外观,但我在服务器端使用 downloadHandler 做错了。在浏览器中运行时,我单击下载按钮,出现下载对话框,并且能够保存文件,但文件是空白的(文件大小为 318 字节)。尝试 .pdf 也不起作用。这是我的代码:

ui.R:

downloadButton('ConDL', label='Download png')

服务器.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 生成的导航按钮,则奖励 - 它们对于交互部分很有用,但会使静态图形混乱。

【问题讨论】:

    标签: r download shiny png vis.js


    【解决方案1】:

    我不明白你的问题。这可以帮助你download network from shiny API

    【讨论】:

    • 是的,我不久前偶然发现了该链接并最终确定了该解决方案。导出的图形确实质量更高,并且可以修改代码以添加交互式版本中可能不需要但在下载中有用的标题,减去下载版本中不需要的导航图标等。唯一的缺点是我仍然在 .png 文件中看到了“导出为 png”的小按钮,但使用其他软件很容易将其裁剪掉。
    • 我找到了一个非常简单的解决方案来导出更高质量的网络。如果您将网络保存到 html 页面中,则可以打开此文件。之后,“右键单击”和“将图像另存为...”。听起来很神奇,分辨率比 visExport O_O 更好。
    • 哈!这个^^^^是真正的答案。哎呀,我什至不必先保存到 html 中——当它运行时右键单击应用程序本身也可以,并且可以一步删除所有无关的东西。 UI 中的一行代码指示最终用户右键单击以下载图像,这肯定超过了服务器端设置所有内容的 60 行左右。谢谢!
    猜你喜欢
    • 2019-03-02
    • 2021-06-17
    • 2017-01-27
    • 1970-01-01
    • 2018-11-18
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多