javascript - 使用 JavaScript 使用 htmlOutput 元素作为导出的 PNG 文件的名称

标签 javascript r shiny

下面是一个带有 JavaScript 代码的 Shiny 应用程序的简单示例,可帮助下载绘图。目前下载的 PNG 文件的名称是“plot.png”。我想使用从 htmlOutput("text") 创建的元素添加到 PNG 文件的名称。在这种情况下,名称将为:“2019-01-31plot.png”

library(shiny)
library(plotly)
library(lubridate)

d <- data.frame(X1 = rnorm(50,mean=50,sd=10), 
                X2 = rnorm(50,mean=5,sd=1.5), 
                Y = rnorm(50,mean=200,sd=25))

ui <-fluidPage(
  title = 'Download Plotly',
  sidebarLayout(

    sidebarPanel(
      htmlOutput("text"),
      selectInput("plot_download", "Select plot to download", choices=list("plot1","plot2")),
      actionButton('download_plot', "Download")

    ),

    mainPanel(

      plotlyOutput('regPlot'),
      plotlyOutput('regPlot2'),
      tags$script('

                  document.getElementById("download_plot").onclick = function() {
                  var plot = $("#plot_download").val();
                  if(plot == "plot1"){
                  var gd = document.getElementById("regPlot");
                  }else{
                  var gd = document.getElementById("regPlot2");
                  }
                  Plotly.Snapshot.toImage(gd, {format: "png"}).once("success", function(url) {
                  var a = window.document.createElement("a");
                  a.href = url; 
                  a.type = "image/png";
                  a.download = "plot.png";
                  document.body.appendChild(a);
                  a.click();
                  document.body.removeChild(a);                      
                  });
                  }
                  ')
    )
  )
)

server <- function(input, output, session) {

  output$text <- renderUI({
    eopm <- Sys.Date() - days(day(Sys.Date()))
    HTML(paste(eopm))
  })

  regPlot11 <- reactive({
    plot_ly(d, x = d$X1, y = d$X2, mode = "markers")
  })
  output$regPlot <- renderPlotly({
    regPlot11()
  })

  regPlot222 <- reactive({
    plot_ly(d, x = d$X1, y = d$X2, mode = "markers")
  })
  output$regPlot2 <- renderPlotly({
    regPlot222()
  })

}

shinyApp(ui = ui, server = server)

[编辑] 从@Stéphane Laurent 得到答案后,我遇到了 IE 的问题,而 Firefox 则没有任何问题。欢迎任何想法、建议!

最佳答案

你可以做到

a.download = $("#text").html() + " plot.png";

关于javascript - 使用 JavaScript 使用 htmlOutput 元素作为导出的 PNG 文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783464/

相关文章:

javascript - 如何在 View 模型不是函数的情况下创建 KnockoutJS 计算可观察对象?

r - R中的Arules序列挖掘

r - Shiny 的仪表板主板高度问题

javascript - 使用下划线 _.extend 避免覆盖嵌套对象?

javascript - 自定义指令进行组件渲染

正则表达式仅拒绝非字母数字字符

r - 使用ggplot多线和居中对齐x轴标签

r - 如何从 Shiny 的应用程序的 ggplot 中删除 NA 值?

shiny - session 特定的 RSQLite 表

javascript - jQuery UI : Best way to create two drag/drop lists where one is a Sortable, 其他办法就掉了吗?