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

如何在Highcharts柱状图中按类型分组相同因子并按年份区分颜色

如何在Highcharts柱状图中按类型分组相同因子并按年份区分颜色

看起来你想要实现的是同一类型(low/medium/high)的柱子按年份聚集在一起,并且用不同颜色区分不同年份,同时用图例展示年份对应的颜色。你的代码目前存在的问题是把所有数据都塞进了一个系列里,而且x轴直接使用了重复的Type值,这就导致柱子没法正确分组,也没法按年份区分颜色。

问题核心分析

  • 你当前的hc_add_series只添加了一个系列,所有柱子都是绿色,完全没法区分不同年份的数据
  • x轴用test$Type会重复显示low/medium/high(因为每个年份都有这三个类型),所以看起来混乱,没有形成预期的分组效果
  • 之前用dplyr分组后没有做后续的系列转换处理,所以分组的作用没体现出来

解决方案

我们需要把数据按年份拆分成不同的系列,每个年份对应一个系列,这样Highcharts会自动把同一Type下的不同年份柱子放在一起,同时用不同颜色区分年份。具体实现如下:

# 加载所需包
library(dplyr)
library(tidyr)
library(highcharter)

# 创建原始数据(保留你原来的代码)
year <- 2020
low <- 45
medium <- 52
high <- 98
df <- data.frame(year, low, medium, high)

year <- 2021
low <- 60
medium <- 83
high <- 80
df2 <- data.frame(year, low, medium, high)

year <- 2022
low <- 64
medium <- 34
high <- 20
df3 <- data.frame(year, low, medium, high)

year <- 2023
low <- 62
medium <- 47
high <- 58
df4 <- data.frame(year, low, medium, high)

test <- rbind(df, df2, df3, df4)
test <- test %>% pivot_longer(!year, names_to="Type", values_to = "total")

# 整理成Highcharts需要的系列列表:每个年份对应一个系列
series_list <- test %>%
  group_by(year) %>%
  group_map(function(data, key) {
    list(
      name = as.character(key$year),
      data = data$total
    )
  })

# 绘制最终图表
highchart() %>%
  hc_chart(type = "column") %>%
  # 批量添加所有年份的系列
  hc_add_series_list(series_list) %>%
  # 设置x轴为唯一的Type值,作为分组依据
  hc_xAxis(categories = unique(test$Type), title = list(text = "Type")) %>%
  hc_yAxis(title = list(text = "GWh")) %>%
  hc_title(text= "Types Year Comparison") %>% 
  hc_subtitle(text= "test") %>% 
  hc_caption(text= "Based on year 2007 population") %>%
  # 启用图例,显示年份对应的颜色
  hc_legend(enabled= TRUE) %>%
  # 可选:调整柱子间距,让同一Type的分组更紧凑
  hc_plotOptions(column = list(
    grouping = TRUE,
    groupPadding = 0.1,
    pointPadding = 0.05
  ))

关键修改说明

  • series_list:用group_by(year)和group_map把每个年份的数据转换成独立的系列对象,每个系列包含年份名称和对应三个Type的数值
  • hc_add_series_list:一次性添加所有年份的系列,Highcharts会自动将同一Type下的不同年份柱子归为一组
  • unique(test$Type):x轴只显示一次low/medium/high,每个类别下会展示对应所有年份的柱子
  • 启用图例后,每个年份的颜色会在图例中清晰展示,方便用户区分不同年份的数据

备注:内容来源于stack exchange,提问作者Magnetar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:59:35