2016-03-11 2 views
0

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

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

Например, я хочу использовать highlightSeriesOpts (см. Первую ссылку), чтобы выделить отдельные серии на графике диаграфов, чтобы отображать ТОЛЬКО выбранную серию в легенде (и не все серии в то же время по умолчанию). Нижние 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) 
+0

Я не могу ответить на ваш вопрос, но почему бы просто не использовать https://rstudio.github.io/dygraphs/? – MLavoie

+0

Я уже использую пакет dygraphs для R :). Однако нет удобной встроенной функции для отображения только выделенной серии в легенде. CSS необходим для этой функции, но предоставленный CSS-код на веб-сайте dygraphs каким-то образом не работает в R/Shiny. Скорее всего, он перезаписывается во время выполнения. Так можно ли это проследить? –

ответ

3

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) 
+1

Спасибо! '.degraph-legend> span {display: none;}' и '.digraph-legend> span.highlight {display: inline;}' сделал трюк :). Важно отметить, что '> span' необходим, чтобы заставить его работать в R/Shiny. Код CSS, который я нашел ранее (см. OP), не упоминал об этом. –

Смежные вопросы