【问题标题】:R Highcharter: Highlight/unhighlight a bar in a bar chart by clickingR Highcharter:通过单击突出显示/取消突出显示条形图中的条形
【发布时间】:2019-06-13 21:45:48
【问题描述】:

是否可以在 highcharter 条形图中突出显示点击的条形?下面的代码捕获了一个栏上的点击事件(代码来自answer这个问题),问题是然后使用这个点击信息突出显示点击的栏,然后在再次点击栏时取消突出显示或者如果另一个栏被点击。

突出显示的一种方法是使用 plotband(请参阅 here),但我很灵活,只要用户可以清楚地看到他们的选择。

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) 

【问题讨论】:

    标签: highcharts r-highcharter


    【解决方案1】:

    您正在寻找 plotOptions.column.allowPointSelect 属性: API - allowPointSelect

    只需更新代码中的第 25 行:

    hc_plotOptions(series = list(stacking = FALSE, allowPointSelect = TRUE, events = list(click = canvasClickFunction, legendItemClick = legendClickFunction))) %>%
    

    要选择超过 1 个点,请按住 ctrl 按钮。

    【讨论】:

    • 这是一种享受。是否还有一种方法可以在列堆叠时拥有等效的allowCategorySelect,以便它可以选择堆叠列中的所有点?
    • 它可以很容易地用纯 JS 使用 point.select() 方法完成:api.highcharts.com/class-reference/Highcharts.Point#select(循环遍历堆栈中的所有点)但我是 R 的初学者,我不知道如何在 R 中实现这个。我明天可以试试
    • 我猜它可以通过使用 highchart 的 id 在创建后对其进行操作来完成,但是我还没有在 R 中找到任何关于 highchart 的示例。
    • 我现在在这里问了这个问题:stackoverflow.com/questions/54301374/…
    • 完成 ;) 比我想象的要容易:D 您将在您创建的新主题中找到答案(上面的链接)。
    猜你喜欢
    • 2014-04-04
    • 2017-07-18
    • 2019-03-26
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多