如何从闪亮的仪表板上下载条形图数据?

时间:2018-12-03 06:02:28

标签: r shiny

下载发光的UI中呈现的条形图数据时,我收到错误文件。 图表下方有一个下载按钮。点击“下载数据”按钮时,数据应下载为csv格式。

代码:

library(shiny)
library(ECharts2Shiny)

dat <- data.frame(c(1, 2, 3), c(2, 4, 6))
names(dat) <- c("Type-A", "Type-B")
row.names(dat) <- c("Time-1", "Time-2", "Time-3")

ui <- fluidpage( loadEChartsLibrary(),
tags$div(id="test", style="width:50%;height:400px;"),
deliverChart(div_id = "test"), downloadButton("test", "Download Data"))

server <-  function(input, output) {
renderBarChart(div_id = "test", grid_left = '1%', direction = "vertical",               
data = dat)
}
shinyApp(ui = ui, server = server)

我想以“ .csv”格式下载该条形图的数据。 谁能帮我纠正代码?

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您不能对所有UI输入使用相同的“ renderTable”服务器输出。 AKA,您需要以可下载文件的形式为图像进行单独的输入和输出。这是我下载.csv文件的示例:

output$downloadData <- reactive({
output$downloadData <- downloadHandler(
filename = function() {
  paste("ProcessedData-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
  write.csv(DataTable, file)
}
)

因此,在您的下载按钮中,将“ test”替换为“ downloadData”,以便它连接到新的服务器输出。请注意,我在这里使用write.csv创建文件,但实际上并没有写入任何磁盘,只是生成了文件并将其传递到downloadData输出中,以便用户触发,然后在单击downloadData输入按钮时保存到自己的磁盘中。您正在尝试保存图片,因此我建议尝试在内容调用内部生成图像文件的方法。回想一下,您可以将图像另存为对象:

#up in the UI somewhere
ui <- fluidpage(loadEChartsLibrary(),
tags$div(id="test", style="width:50%;height:400px;"),
deliverChart(div_id = "test"), downloadButton("downloadData", "Download Data"))  

server <-  function(input, output) {
output$test <- renderBarChart(div_id = "test", grid_left = '1%', direction = "vertical",               
data = dat)

output$downloadData <- reactive({
output$downloadData <- downloadHandler(
filename = function() {
  paste("Image.png", sep="") #just the file name you want to have as default
},
content = function(file) {
  write.csv(DataTable, file)
)
}

我没有您的实际代码,因此这可能无法作为即插即用的解决方案,但我相信这是正确的方向。