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

R Highcharter多堆叠柱状图同组高亮及列内分组排序实现咨询

Highcharter 堆叠柱图功能实现方案

功能1:按VALUE值排序堆叠顺序

直接在hc_plotOptions的column配置中添加stackSorting参数即可实现单根堆叠柱内的分组按数值自动排序,可通过sortDirection控制升序/降序:

  • 降序排列:sortDirection = "desc"
  • 升序排列:sortDirection = "asc"

功能2:同分组同步高亮效果

通过注入Highcharts原生JS事件实现:监听系列的mouseOver和mouseOut事件,悬浮时将当前系列所有点统一设置为悬浮状态,移出时重置状态即可实现跨柱同分组同步高亮。

完整可运行代码

library(highcharter)
library(dplyr)

## Sample dataframe
YEAR <- c(2019,2020,2021) 
CATEGORY <- c("dog", "cat", "mouse")
SAMPLE_DATA <- expand.grid(YEAR, CATEGORY)
names(SAMPLE_DATA)[1] <- "CATEGORY"
names(SAMPLE_DATA)[2] <- "YEAR"
SAMPLE_DATA$VALUE <- runif(n = 9, min = 400, max = 900) 

## Chart 
SAMPLE_DATA <- SAMPLE_DATA %>% 
  group_by(YEAR, CATEGORY) %>% 
  summarise(VALUE = sum(VALUE, na.rm = T)) 

highchart() %>%
  hc_add_series(data = SAMPLE_DATA, hcaes(x = YEAR, y = round(VALUE,0), group = CATEGORY), type = "column") %>%
  hc_plotOptions(
    column = list(
      stacking = "normal",
      # 堆叠按值排序配置,调整sortDirection可切换升序降序
      stackSorting = list(
        enabled = TRUE,
        sortDirection = "desc"
      )
    ),
    series = list(
      # 同步高亮事件配置
      events = list(
        mouseOver = JS("function() {
          this.points.forEach(function(point) {
            point.setState('hover');
          });
        }"),
        mouseOut = JS("function() {
          this.points.forEach(function(point) {
            point.setState('');
          });
        }")
      )
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:45:01