#r #highcharts #shiny #r-highcharter
Вопрос:
Я столкнулся со следующей проблемой. У меня есть блестящее приложение, и я хочу экспортировать графики, созданные с помощью highcharter
png-изображений. Я попытался использовать экспортный сервер, но это не сработало, потому что единственной возможности указать URL highcharter::hc_exporting
-адрес в моей среде недостаточно (несколько служб Docker и некоторые прокси-серверы). Я не хочу отправлять данные, представленные на графиках, на официальный сервер экспорта highcharts.
Поэтому я придумал автономный экспорт и экспорт на стороне клиента. Согласно https://www.highcharts.com/docs/export-module/client-side-export, мне нужно включить
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/offline-exporting.js"></script>
В документах highcharts (https://api.highcharts.com/highcharts/exporting.fallbackToExportServer) сказано, что fallbackToExportServer
можно установить значение FALSE
для отключения сервера экспорта, если экспорт на стороне клиента не работал. Более того, говорят It is recommended to define the exporting.error handler if disabling fallback, in order to notify users in case export fails.
, что я не зашел так далеко, но любая помощь по error
-функции также была бы признательна.
Я попытался реализовать экспорт на стороне клиента в блестящем приложении. Проблема: он возвращается на официальный сервер экспорта highcharts, который можно увидеть, посмотрев на Network
-трафик в настройках разработчика моего браузера. Я протестировал его в браузере Brave и Microsoft Edge. Для воспроизведения ошибки можно использовать следующий код:
require(highcharter)
require(shiny)
highChartExportingWrapper <- function(hc) {
highcharter::hc_exporting(
hc = hc,
enabled = TRUE,
fallbackToExportServer = FALSE,
buttons = list(contextButton = list(menuItems = c("downloadPNG","downloadCSV")))
)
}
hc_export_testapp <- function() {
ui <- fluidPage(
tags$script(src = "https://code.highcharts.com/highcharts.js"),
tags$script(src = "https://code.highcharts.com/modules/exporting.js"),
tags$script(src = "https://code.highcharts.com/modules/offline-exporting.js"),
sidebarLayout(
sidebarPanel(radioButtons(inputId = "n", label = "nr of points", choices = 10^(2:5))),
mainPanel(highcharter::highchartOutput("hc", height = 800))
)
)
server <- function(input,output,session) {
output$hc <- highcharter::renderHighchart({
n <- as.integer(input$n)
plotData <- data.frame(Idx=1:n,Brownian=round(cumsum(rnorm(n)),2))
hc <- highcharter::hchart(plotData, "line", highcharter::hcaes(x = Idx, y = Brownian))
highChartExportingWrapper(hc)
})
}
shinyApp(ui,server,options = list(launch.browser=TRUE))
}
Просто запустите приложение, позвонив hc_export_testapp()
и нажав на Download PNG image
кнопку в меню в правом верхнем углу графика.
Примечание: При выборе последнего варианта из 100 тысяч баллов я сталкиваюсь 413 Request Entity Too Large
с URL https://export.highcharts.com/
-адресом . Это проблема, которая, как мы надеемся, также будет решена с помощью экспорта на стороне клинта.