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 の相互作用と機能にかなり投資しています。ありがとうございました。