如何在Highcharter甘特图中将同一资源的两个节点放在同一行?
解决Highcharter甘特图同一资源多任务同行显示问题
要让同一资源(如"Nissan Leaf")的多个任务显示在同一行,核心是正确配置y轴为类别型,并移除不适用于甘特图的分组配置,以下是修正后的完整代码及说明:
修正后的代码
library(highcharter) library(tidyverse) library(lubridate) data <- tibble( start = today(), end = (today()+1), duration = 1, completed = 0.95, name = "Nissan Leaf", id = 1 ) %>% add_row( start = (today()-2), end = (today()+2.2), duration = 4.2, completed = 0.8, name = "Tesla", id = 2 ) %>% add_row( start = (today()+1.5), end = (today()+2.2), duration = 0.7, completed = 0, name = "Nissan Leaf", id = 1 ) %>% # 正确转换日期为时间戳(适配dplyr 1.0+语法) mutate(across(where(is.Date), datetime_to_timestamp)) %>% arrange(start) highchart(type = "gantt") %>% # 配置y轴为类别型,自动按name字段分组行 hc_yAxis(type = "category") %>% hc_add_series( name = "Program", data = data # 移除原分组配置,甘特图不需要柱状图的分组逻辑 )
关键调整说明
- y轴类型设置:通过
hc_yAxis(type = "category"),让Highcharts将数据中的name字段作为y轴的类别标识,同一name的所有任务会自动分配到同一行。 - 移除分组配置:原代码中的
grouping参数是为柱状图设计的分组功能,在甘特图中使用会导致同一资源的任务被拆分到不同行,因此必须移除。 - 数据处理修正:将过时的
mutate_if替换为across(where(is.Date), ...),确保日期正确转换为Highcharts可识别的时间戳。
内容的提问来源于stack exchange,提问作者Jochem
相关产品推荐
相关产品推荐

