javascript - R/Shiny 的 dygraphs 包中突出显示图例的系列

标签 javascript css r shiny dygraphs

我正在用 R 编写一个 Shiny 应用,它使用了 dygraphs 包。

该应用程序具有交互式绘图功能,它使用 dyHighlight() 函数突出显示所选系列。但是,由于数据涉及 1000 列,因此图例显示 1000 个系列。

这是一个只有 2 列的最小代码示例:

ui <- fluidPage(

  # This CSS code should solve the problem, but somehow does not.
  # To test, replace CSS in tags$style(...) with this code
  #.dygraph-legend  { display: none; }
  #.dygraph-legend .highlight { display: inline; }

  # CSS to highlight selected series in legend.
  # Does not solve problem, but is best alternative for now.
  tags$style("
              .highlight {
               border: 2px solid black;
               background-color: #B0B0B0;
              }

             "), 

  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: https://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

  output$plot <- renderDygraph({

    dygraph(data) %>%

      # Highlighting series
      dyHighlight(data, 
                  highlightCircleSize = 2, 
                  highlightSeriesBackgroundAlpha = .5, 
                  highlightSeriesOpts = list(strokeWidth = 2))

  })

}

shinyApp(ui = ui, server = server)

有没有办法调整 R/Shiny 中的图例,以便只显示突出显示的系列(而不是同一时间点的所有系列)?
以下链接中下方的 2 个图准确显示了应该实现的目标:http://dygraphs.com/gallery/#g/highlighted-series

这已经在 stackoverflow 上多次被质疑,但尚未得到答复或不起作用(+我不想发帖):
Is there a way to highlight closest series in R dygraphs?
Highlight Closest Series - but only show X/Y of highlighted series?
100 labels in separate div with highlighted series in a box

无论如何,dyHighlight() 似乎没有支持此功能的内置参数,因此可能需要 JavaScript 和 CSS。

通过互联网搜索,我从以下链接找到了 highlightSeriesOptshighlightCallbackunhighlightCallback: http://dygraphs.com/options.html

但是如何在 R 中使用这些选项呢?

最佳答案

这应该让你开始:

https://rstudio.github.io/dygraphs/gallery-css-styling.html

http://dygraphs.com/css.html

The legend has the .dygraph-legend class. When using highlightSeriesOpts, the selected series’ gets a .highlight class. This can be used to show only a single series in the legend.

因此您必须创建 CSS 文件并将其添加到图形中:https://rstudio.github.io/dygraphs/gallery-css-styling.html

这应该可行,但由于某些原因 .dygraph-legend 正在接管并且没有显示图例。

 .dygraph-legend  { display: none; }

.highlight {
  display: inline;
}

备选方案:

.dygraph-legend  { display: all; }

.highlight {
  display: inline;
  background-color: #B0B0B0;
}

保存为 *.css 文件:

dygraph(data)%>% dyHighlight() %>% dyCSS("path to css")

这并没有解决问题,而是为所选系列添加了亮点: enter image description here

关于javascript - R/Shiny 的 dygraphs 包中突出显示图例的系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870471/

相关文章:

javascript - ReactJS + Flux - 如何实现 toasts/通知?

javascript - 如何让子 div 覆盖其在网格中的父位置?

r - 忽略 NA 进行分组

javascript - 使用 Node.js 和浏览器进行 HTTP POST 原始二进制数据,无需使用表单数据

javascript - AngularJS 过滤深层属性

HTML 表格内容对齐

javascript - Bootstrap 开关未在 View 中呈现

r - 使用 facet_wrap () 绘制多个条形图

xml - 使用并行化通过 R 抓取网页

javascript - 从 javascript [spotify auth] 中的弹出窗口获取访问 token url