Параметры JavaScript Plain Dygraphs в R/Shiny

Есть ли способ использовать простые параметры JavaScript Dygraphs в R (и, в частности, Shiny)?
http://dygraphs.com/options.html

Я думаю, что функция JS() из пакета htmlwidgets может быть полезна, но я не уверен.

Например, я хочу использовать highlightSeriesOpts (см. первую ссылку) для выделения отдельных серий в графике dygraphs, чтобы отображать ТОЛЬКО выбранные серии в легенде (а не все серии одновременно по умолчанию). Нижние 2 графика в следующей ссылке точно показывают, что должно быть достигнуто:
http://dygraphs.com/gallery/#g/highlighted-series

Решение CSS уже было дано (т.е. .dygraph-legend {display: none;} и .dygraph-legend .highlight {display: inline;} ), но оно почему-то не работает в R/Shiny.

Во всяком случае, вот мой концептуальный сценарий. Это не работает, но все советы очень ценятся.

ui <- fluidPage(

  sidebarLayout(
    sidebarPanel(),
    mainPanel(dygraphOutput("plot"))

  )

)

server <- function(input, output) {

  set.seed(123)
  data <- matrix(rnorm(12), ncol = 2)
  data <- ts(data)

  # Workaround for what might be a bug
  # Reference: http://stackoverflow.com/questions/28305610/use-dygraph-for-r-to-plot-xts-time-series-by-year-only
  data <- cbind(as.xts(data[,1]), as.xts(data[,2]))

  colnames(data) <- c("Series 1", "Series 2")
  #print(data) # Uncomment to view data frame

  # The logic of the following is that plain Dygraphs JavaScript
  # code can be used as plotting material
  output$plot <- JS("
                     new Dygraph(plot,
                                 data,
                                 { highlightSeriesOpts: {strokeWidth: 3} });

                     g.updateOptions({ highlightSeriesOpts: {strokeWidth: 3} });

                    ")

}

shinyApp(ui = ui, server = server)

person i.p.freely    schedule 11.03.2016    source источник
comment
Я не могу ответить на ваш вопрос, но почему бы просто не использовать rstudio.github.io/dygraphs?   -  person MLavoie    schedule 11.03.2016
comment
Я уже использую пакет dygraphs для R :). Однако удобной встроенной функции для отображения в легенде только выделенных серий нет. Для этой функции требуется CSS, но предоставленный код CSS на веб-сайте dygraphs почему-то не работает в R/Shiny. Скорее всего, он перезаписывается во время выполнения. Так есть ли способ отследить это?   -  person i.p.freely    schedule 15.03.2016


Ответы (1)


highlightSeriesOpts делает выделенный штрих серии более жирным и не влияет на легенду. Вам по-прежнему понадобится правильный CSS, чтобы отображать только самые близкие серии в легенде. Чтобы установить highlightSeriesOpts, как вы предлагаете, есть наглядный пример на http://rstudio.github.io/dygraphs/gallery-series-highlighting.html.

lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)

dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
  dyHighlight(highlightSeriesOpts = list(strokeWidth = 3))

Чтобы получить более полный ответ в Shiny, мы могли бы сделать что-то вроде этого.

library(shiny)
library(dygraphs)

lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)

ui <- dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
  dyHighlight(highlightSeriesOpts = list(strokeWidth = 3)) %>%
  dyCSS(textConnection("
     .dygraph-legend > span { display: none; }
     .dygraph-legend > span.highlight { display: inline; }
  "))

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

}

shinyApp(ui,server)
person timelyportfolio    schedule 11.03.2016
comment
Благодарю вас! .dygraph-legend > span {display:none;} и .dygraph-legend > span.highlight {display:inline;} сделали свое дело :). Важно отметить, что > span необходим для работы в R/Shiny. Код CSS, который я нашел ранее (см. OP), не упоминал об этом. - person i.p.freely; 15.03.2016