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

R/Shiny中如何预选中树形图的点击节点(如智利)

实现Shiny Treemap初始默认选中指定国家(以Chile为例)

现有Shiny应用通过highcharter实现了树形图(treemap),点击国家名称后会在下方显示该名称,但应用启动时input$treemapclick无值,需要设置初始默认选中Chile,同时确保后续点击其他国家能正常更新显示。

解决方案

通过以下两步实现需求,兼顾初始值设置与交互逻辑:

  • 用reactiveVal维护选中状态,设置初始值为目标国家
  • 监听树形图点击事件更新状态,可选添加图表加载完成后的自动点击逻辑,同步视觉选中效果

完整代码

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

ui <- fluidPage(
  highchartOutput(outputId = 'hcontainer'),
  htmlOutput('countries')
)

server <- function(input, output, session) {
  # 初始化选中的国家,默认设为Chile
  selected_country <- reactiveVal("Chile")
  
  # 监听treemap点击事件,更新选中状态
  observeEvent(input$treemapclick, {
    selected_country(input$treemapclick)
  })
  
  # 定义点击事件的JS逻辑
  click_js <- 
    JS("function(event) {Shiny.onInputChange('treemapclick', event.point.name);}")
  
  # 可选:图表加载完成后自动触发Chile的点击,同步视觉选中效果
  init_click_js <- JS("function() {
    var chart = this;
    var chilePoint = chart.series[0].points.find(point => point.name === 'Chile');
    if(chilePoint) {
      chilePoint.firePointEvent('click');
    }
  }")

  output$hcontainer <- renderHighchart({
    gapminder::gapminder %>%
      dplyr::filter(year  == 2007) %>%
      highcharter::data_to_hierarchical(group_vars = c(continent, country),
                                        size_var = pop) %>%
      hchart(type = "treemap") %>%
      hc_plotOptions(treemap = list(
        events = list(
          click = click_js,
          load = init_click_js # 绑定加载完成事件
        )
      ))
  })

  output$countries <- renderUI({
    h1(selected_country())
  })

}

shinyApp(ui, server)

代码要点说明

  1. reactiveVal维护状态:selected_country作为选中状态的唯一数据源,初始值设为Chile,确保应用启动时就有值可以渲染
  2. 点击事件监听:observeEvent捕获用户点击树形图的动作,实时更新选中状态
  3. 自动点击逻辑(可选):init_click_js在图表加载完成后,自动查找Chile节点并触发点击,既同步input$treemapclick的值,也让图表显示选中的视觉反馈;如果不需要视觉选中效果,可删除这段JS及load事件配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:20:46