我正在用 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。
通过互联网搜索,我从以下链接找到了 highlightSeriesOpts
、highlightCallback
和 unhighlightCallback
:
http://dygraphs.com/options.html
但是如何在 R 中使用这些选项呢?
最佳答案
这应该让你开始:
https://rstudio.github.io/dygraphs/gallery-css-styling.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")
关于javascript - R/Shiny 的 dygraphs 包中突出显示图例的系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870471/