【问题标题】:How to detect multiple cliks in a bar in highchart column r shiny plot如何检测高图表列 r 闪亮图中的条形图中的多次点击
【发布时间】:2016-09-12 08:58:37
【问题描述】:

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

另一个问题是:是否可以检测到对情节背景的点击?

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_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 = 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], ".") 
  })

【问题讨论】:

    标签: javascript jquery r highcharts shiny


    【解决方案1】:

    在 Shiny 中使用点击事件时,有时需要再次获取具有相同值的相同事件。是 Shiny 所固有的,只有值的变化才会被提醒,而响应式只对变化做出反应。 一个简单的解决方法是不仅发送您需要的值,还发送一个随机数或当前时间。每次都会改变的东西。

    所以你的图例点击的可能性,当多次点击同一个系列时,将JS函数更改为

    Shiny.onInputChange('legendClick', [this.name, Math.random()]);
    

    在代码中进一步使用input$legendClick[1] 访问系列名称。

    但是,在您的情况下,您还想获取图例项目的状态。这当然是随着点击而改变的事情。因此,如果我们将其与名称一起发送,则输入值将始终更改。所以不需要上面的一般建议。图例状态存储在event.target.visible 下的event 中。在那里,您可以看到被点击的系列在被点击时的可见性状态。这意味着在您获得点击事件后,您的可见性正好相反。

    代码如下:

    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, event.target.visible]);}")
    
        highchart() %>% 
          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 = 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, {
        # Visibility of target. When deselecting, the target was visible at the moment of click.
        seriesStatus <- switch(input$legendClicked[2], "FALSE" = "visible", "TRUE" = "invisible")
        outputText <<- paste0("You clicked into the legend and selected series ", input$legendClicked[1], " and this Series is now ", seriesStatus, ".")
      })
    
      output$text <- renderText({
        outputText      
      })
    }
    
    shinyApp(ui, server) 
    

    另一件可能会帮助您了解您可以做的其他事情的事情是查看 JavaScript 控制台。运行 Shiny 应用程序时,右键单击显示窗口,按Inspect 打开 RStudio 检查器。在那里,其中一位骑手是Console,您可以在其中获得所有客户端错误/警告消息。现在,一个有用的 JavaScript 命令是console.log,它会打印到这个特定的控制台。因此,在一些点击函数中,尝试添加命令console.log(event); 并在下一次 Shiny 应用启动时打开 JavaScript 控制台。可以完全签出该事件,以查看单击事件的哪些部分有用。 (我从那里搜索得到了可见性属性。)

    关于第二个更广泛的问题:整个图表有一个点击事件,可以添加到 R 中的hc_chart 函数中。就像其他点击事件一样。更多信息可以找到here

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 2016-09-09
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多