You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny点击Highchart通过Shiny.onInputChange获取JS变量值

问题根因

无法获取country值的核心原因是hcaes映射阶段没有将country字段绑定到散点的属性上。highcharter默认只会把hcaes中显式声明的字段挂载到点击事件返回的event.point对象下,你当前的代码仅映射了lifeExp(x轴)、gdpPercap(y轴)、continent(分组)三个字段,点对象中本身不存在country相关属性,因此所有直接取值的写法都会返回空值。

修复方法

仅需要在hcaes中补充name = country的映射即可,你原本写的JS点击逻辑event.point.name是正确的,不需要调整。

修复后可直接运行的完整代码:

library(shiny)
library(highcharter)
library(gapminder)


ui <- fluidPage(
  column(12, highchartOutput("hcontainer",height = "300px")),
  column(12, textOutput("clicked"))
)

server <- function(input, output){
  
  click_js <- JS("function(event) {Shiny.onInputChange('scatterclick', event.point.name);}")
  
  output$hcontainer <- renderHighchart({  
    
    gapminder::gapminder %>%
      hchart(
        type = "scatter", 
        # 关键修改:新增name = country映射,将国家名称绑定到散点属性
        hcaes(x = lifeExp, y = gdpPercap, group = continent, name = country), 
        showInLegend = TRUE
      )  %>%
      hc_plotOptions(series = list(stacking = FALSE, events = list(click = click_js)))
    
  })
  
  output$clicked <- renderText({
    if(is.null(input$scatterclick)) "点击散点查看对应国家" else paste0("当前选中国家:", input$scatterclick)
  })
  
}

shinyApp(ui, server)
扩展提示

如果后续需要获取数据集中其他字段(比如pop人口、year年份),只需要在hcaes中增加自定义属性映射即可,例如添加my_pop = pop后,就可以在JS点击事件中通过event.point.my_pop读取对应点的人口数据。

内容的提问来源于stack exchange,提问作者Lilou Ptk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:48:18