如何用gg_vistime为不同组中相同变量统一分配颜色
解决gg_vistime中跨组统一事件颜色的问题
问题核心:gg_vistime默认会将col.group和col.event的组合作为颜色映射的分类依据,导致同一事件(如S、M)在不同组中被识别为不同类别,从而分配不同颜色。另外你误用了scale_color_manual——gg_vistime的事件颜色是填充色(fill),不是线条色(color)。
修正后的代码:
library(RColorBrewer) library(gg_vistime) # 从当前数据集提取abb的唯一值,确保颜色映射覆盖所有事件 unique_abb <- unique(test1$abb) myColors <- brewer.pal(length(unique_abb), "Set3") names(myColors) <- unique_abb gg_vistime(test1, title = "Test 1", col.event = "abb", col.group = "brand", col.start = "start_year", col.end = "end_year", optimize_y = TRUE, show_labels = TRUE) + scale_x_datetime(date_breaks = "1 year", date_labels = "%Y") + theme( plot.title = element_text(hjust = 0, size=15), axis.text.x = element_text(size = 11, color = "black", angle = 0), axis.text.y = element_text(size = 11, color = "black", angle = 0)) + # 关键:使用scale_fill_manual而非scale_color_manual,绑定颜色到abb scale_fill_manual(name = "Indicator", values = myColors)
关键修改点:
- 改用
scale_fill_manual:gg_vistime的事件块使用填充色,而非线条色,需针对fill尺度设置颜色映射。 - 基于当前数据集的
abb生成颜色向量:确保颜色映射的键与数据中的事件完全匹配,避免因其他数据集(如tambah)的水平不一致导致映射失效。 - 统一颜色映射依据为
abb:通过scale_fill_manual直接将颜色绑定到abb取值,忽略组的影响,实现跨组同事件同颜色。
内容的提问来源于stack exchange,提问作者Raisa Putri Alifa
相关产品推荐
相关产品推荐

