如何在高亮度列rshiny情节中了解有关单击条的信息

我想在用户点击列高清图的栏中时检测到一些信息。 如果在图例中选择了名称或者单击了背景,我需要知道所单击栏的名称和类别。 名称部分没问题,但我无法发现哪些是我必须编写的JS代码才能知道这类信息。

非常感谢

library("shiny") library("highcharter") ui <- shinyUI( fluidPage( column(width = 8, highchartOutput("hcontainer", height = "500px")), column(width = 4, textOutput("text")) ) ) server <- function(input, output) { a <- data.frame(b = LETTERS[1:10], c = 11:20, d = 21:30, e = 31:40) output$hcontainer <- renderHighchart({ myClickFunc % hc_xAxis(categories = a$b) %>% hc_add_serie(name = "c", data = a$c) %>% hc_add_serie(name = "d", data = a$d) %>% hc_add_serie(name = "e", data = a$e) %>% hc_plotOptions(series = list(stacking = FALSE, events = list(click = myClickFunc))) %>% hc_chart(type = "column") }) output$text <- renderText({ input$hcClicked }) } 

新问题当我单击禁用并立即启用列时,我无法检测到第二个事件。 如何检测列或图例是否已禁用和启用(反之亦然),中间没有任何其他不同的事件?

其他问题是:有可能检测到情节背景上的点击吗?

谢谢

这次我可能会更详细地介绍一下你可以做什么以及你有什么可能性:

highchart事件函数始终具有JS("function(event) { ... }")JS代表JavaScript并阻止R解释其中的代码。 幸运的是,JavaScript看起来很像R,即使你不知道任何JavaScript,它也会使编写语句变得更容易。

内部函数总是必须有一个event参数。 从highcharts文档中,这个事件有几个属性,最重要的是, point 。 JavaScript中的属性可以通过点访问. 就像你在R中使用$ 。所以event.point将是你点击的点。

现在,这一点也有很多属性,其中大多数都不是很有用。 但是,您可能想要使用的值可能是各个轴值的categorycolorxy 。 因此,如果您想知道单击点的y值,则event.point.y是命令。 另一个例子:在你的情况下, event.point.x将产生x值,在条形图的情况下,它不是category ,而是category的索引(计数从0开始)。 在前面的示例(您的代码片段)中,我还使用了this对象。 this代表已被点击的series 。 这只是一个快捷方式,因为您还可以通过event.point.series获取该系列。 系列本身有很多属性,比如name

关于JavaScript的注意事项:JavaScript中的列表(数组)是使用[ ... ]括号创建的。 我在下面的代码中使用它来在一个命令中发送多个值。

这是第一部分。 现在,您希望将选择内容传达给您的shiny应用。 为此,Shiny有内置的信息渠道。 一个是JavaScript函数Shiny.onInputChange 。 此函数有两个参数,第二个是您要发送的值。 第一个是名称,稍后您要在其下访问该值。 所以用法总是Shiny.onInputChange('myVar', value) 。 现在,此值将发送到您的服务器,并可在input$myVar下访问。 在那里,您具有与任何其他输入相同的规则。 您可以将input$myVar放入反应环境中,只要有新内容发送到input$myVar ,它们就会做出反应。

关于你的直接请求:要知道点击值属于哪个类别,可以通过稍微更改初始点击function来实现。 (我将这些function重命名为适合他们的function。)上面的解释应该让它变得可以理解。 使用图例点击的第二个function使用内置于highcharts另一个事件“slot”。 legendItemClick工作方式与普通click类似,但只能监听图例点击。 还有一些可以分配的事件处理程序,即mouseOver如果你需要hover事件。

好的,现在这里有一个示例代码,为我上面写的内容提供一个工作示例:

最好的祝福

 library("shiny") library("highcharter") ui <- shinyUI( fluidPage( column(width = 8, highchartOutput("hcontainer", height = "500px")), column(width = 4, textOutput("text")) ) ) server <- function(input, output) { a <- data.frame(b = LETTERS[1:10], c = 11:20, d = 21:30, e = 31:40) output$hcontainer <- renderHighchart({ canvasClickFunction <- JS("function(event) {Shiny.onInputChange('canvasClicked', [this.name, event.point.category]);}") legendClickFunction <- JS("function(event) {Shiny.onInputChange('legendClicked', this.name);}") highchart() %>% hc_xAxis(categories = a$b) %>% hc_add_series(name = "c", data = a$c) %>% hc_add_series(name = "d", data = a$d) %>% hc_add_series(name = "e", data = a$e) %>% hc_plotOptions(series = list(stacking = FALSE, events = list(click = canvasClickFunction, legendItemClick = legendClickFunction))) %>% hc_chart(type = "column") }) makeReactiveBinding("outputText") observeEvent(input$canvasClicked, { outputText <<- paste0("You clicked on series ", input$canvasClicked[1], " and the bar you clicked was from category ", input$canvasClicked[2], ".") }) observeEvent(input$legendClicked, { outputText <<- paste0("You clicked into the legend and selected series ", input$legendClicked, ".") }) output$text <- renderText({ outputText }) } shinyApp(ui, server)