【问题标题】:How to send a message to highcharter in Shiny to select a point如何在 Shiny 中向 highcharter 发送消息以选择一个点
【发布时间】:2021-08-28 14:49:57
【问题描述】:

在下面相对简单的闪亮应用程序中,我选择了一个加载点。一旦用户在选择器中选择了一个新数字,我希望 highcharter 改为选择该点。换句话说,如果用户选择了 1 那么它应该选择第 1 个点。

关于如何做到这一点的建议?

library(shiny)
library(highcharter)

ui <- function(){
  div(
    selectInput('id', label = 'select', choices = 1:3, selected = 2),
    highchartOutput("plot")
  )
}

server <- function(session, input, output){

  
  output$plot <- renderHighchart({
    hc <- highchart() %>% 
      hc_chart(events = list(load = JS("function(){this.series[0].points[2].select()}"))) %>% 
      hc_add_series(data.frame(x = 1:3, y = 1:3), "scatter", hcaes(x, y)) %>%
      hc_plotOptions(
        allowPointSelect = TRUE
      )
    
    hc
  })
  
  observeEvent(input$id, {
    # Here I'd like to send a message to the highchart
    # to select the chosen point
  })
}


shinyApp(ui, server)

【问题讨论】:

    标签: r shiny r-highcharter


    【解决方案1】:

    这可以使用 {highcharter} 开发版 (remotes::install_github("jbkunst/highcharter")) 中的 hcpxy_update_point 函数来完成。

    请务必为图表使用正确的id,在本例中为plot

    https://jbkunst.shinyapps.io/02-proxy-functions/ 中的更多示例。

    library(shiny)
    library(highcharter)
    
    ui <- function(){
      div(
        selectInput('id', label = 'select', choices = 1:3, selected = 2),
        highchartOutput("plot")
      )
    }
    
    server <- function(session, input, output){
    
      output$plot <- renderHighchart({
        hc <- highchart() %>% 
          hc_chart(events = list(load = JS("function(){this.series[0].points[2].select()}"))) %>% 
          hc_add_series(
            data.frame(x = 1:3, y = 1:3),
            "scatter",
            hcaes(x, y),
            id = "someid",
            ) %>%
          hc_plotOptions(
            allowPointSelect = TRUE
          )
        
        hc
      })
      
      observeEvent(input$id, {
        
        id_0_based <- as.numeric(input$id) - 1
        
        highchartProxy("plot") %>%
          # set all points unselected `selected = FALSE`
          hcpxy_update_point(id = "someid", 0:2, selected = FALSE) %>% 
          # then set to selected the _selected_ point
          hcpxy_update_point(
            id = "someid",
            id_point = id_0_based, 
            selected = TRUE
            )
      })
    }
    
    
    shinyApp(ui, server)
    

    【讨论】:

    • 工作得很好!感谢您的提示:)
    • 我看到您的示例应用程序(以及我使用 hcpxy_update_point() 的应用程序)不再工作。我添加了一个 GitHub 问题 (github.com/jbkunst/highcharter/issues/725),可能与最近更新 jQuery 的提交有关?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2021-10-23
    • 2019-03-25
    • 2023-03-24
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多