2

Shiny アプリで dygraph の PNG をエクスポートできません。に従ってこのスクリプトを使用し、Shiny 用に変更しました。ライブラリを使用して、dygraph オブジェクトをクライアントに渡しています。次のエラーが発生します。shinyjs

Uncaught TypeError:「CanvasRenderingContext2D」で「DrawImage」を実行できませんでした。

うまくいけば再現可能な例を次に示します。

ui.R

library(shiny)
library(dygraphs)
library(shinyjs)

js.png <- '
  shinyjs.exportPNG = function(params) {
    var defaultParams = {
      dygraph : null,
      img : null,
      userOptions : null,
    }
    params = shinyjs.getParams(params, defaultParams);  

    var image = document.getElementById(params.img);
    Dygraph.Export.asPNG(params.dygraph, image);
  }
  '

shinyUI(fluidPage(
  useShinyjs(),
  extendShinyjs(text = js.png),
  actionButton('btn', 'Go'),
  includeScript('./www/dygraph-extra.js'),
  dygraphOutput("plot"),
  img(id = 'plot-static')
  )
)

サーバー.R

library(dplyr)
library(xts)

shinyServer(function(input, output) {

  observeEvent(input$btn, {
    js$exportPNG(dygraph = dyplot.global, img = 'plot-static')
  })

  plot.data <- reactive({
    d <- airquality %>%
      mutate(Date = as.Date(paste('1973', Month, Day, sep = '-'))) %>%
      select(Date, Ozone, Temp) %>%
      arrange(Date)
    d.xts <- xts(d[,-1], order.by = d$Date)
  })

  output$plot <- renderDygraph({
    g <- dygraph(plot.data()) %>%
      dyRangeSelector()
    dyplot.global <<- g
    g
  })
})

JavaScriptは超初心者なので、お手柔らかにお願いします。実際のプロットとデータはかなり複雑で、私は dygraph の相互作用と機能にかなり投資しています。ありがとうございました。

4

0 に答える 0