[根据原始问题编辑]
在一个闪亮的应用程序中(我的第一个),我使用了及时投资组合在答案中建议的代码(从2015年开始),以自定义笔形时间序列图中的图例。原始问题在这里:
How can I get tooltips showing in dygraphs without annotation
timelyportfolio的代码满足我的要求:我的数据是票房收据的时间序列,我想在图例中日期和收据下方显示标题。我对JavaScript的知识很初级,而且我不太了解及时投资组合的代码是如何工作的。因此,我按原样使用了代码,只是在最后更改了代码以使用标题矢量,并添加了换行符和斜体。这是相关代码:
# Build dygraph plot
operastimeseries <- reactive({
dygraph(operas_xts(),
main = "Opera Receipts, Burgtheater, 14 Apr 1789 to 7 Mar 1791",
ylab = "Receipts (kr)") %>%
dySeries("kr", label = "Receipts (kr)") %>%
dyOptions(drawPoints=TRUE, pointSize=2) %>%
# Format date in Legend consistently. Add padding at extremes of
# range so that points are easier to see
dyAxis("x", valueFormatter = "function(ms) {
return new Date(ms).toDateString()}",
rangePad=5
) %>%
dyEvent(x=as.Date("1790-02-20"), label="Death of Joseph II") %>%
# dyHighlight(highlightCircleSize = 5) %>%
dyLegend(show="auto") %>%
dyRangeSelector() %>%
# Code to add title to legend adapted from StackOverflow 27671576,
# answer by timelyportfolio
dyCallbacks(
highlightCallback = sprintf(
'function(e, x, pts, row) {
var customLegend = %s
// should get our htmlwidget
var legendel = e.target.parentNode.parentNode
.querySelectorAll(".dygraph-legend")[0];
// should get our htmlwidget
legendel.innerHTML = legendel.innerHTML + "<br>" +
"<em>" + customLegend[row] + "</em>";}', # supply a vector
jsonlite::toJSON(titles())
))
}) # End reactive dygraph
该回调工作正常,但似乎与dyHighlight()
有关的问题除外,该问题在上面的代码中已注释掉。当代码中包含dyHighlight()
时,将鼠标悬停在标题上的 first 点上,会在图例中短暂显示,但几乎立即消失。对于随后的点(在预期的情况下在图例中显示标题),不会发生这种情况。但是,如果将光标移到图表区域之外,然后再移回该模式,则重复该模式:鼠标悬停的第一个点的标题消失,但随后的点正常工作。
有人知道为什么会这样吗,以及如何修复代码,以便鼠标悬停时即使在第一个点上,该点的标题也能显示在图例中?
我希望能够使用dyHighlights()
在用户将鼠标悬停在上方时使该点的扩大更加明显,因为在图形显示时highlightCircleSize = 3
的默认设置确实不够用是密集的,就像用户第一次看到它时一样。
有光泽的实时应用程序(无dyHighlight()
)位于https://dexteredge.shinyapps.io/Burgtheater/
记录表位于“系列”标签中。
代码在这里: