ggplot(geom_line)绘制工作归属图重叠凸显及图例颜色问题咨询
问题解决方案
1. 图例显示错误原因排查
你拆分数据后单独对每个子集的workplace转因子,导致两个子集的workplace因子都仅包含1个水平,和scale_color_manual设置的2个颜色值无法匹配,因此图例显示异常。
最优解决方式是不拆分数据集,直接对完整数据集的workplace指定因子水平后一次性绘图,避免多层映射冲突。
2. 重叠区域醒目优化方案
推荐两种可组合使用的方案,效果远优于仅调整透明度:
- 底层加粗提示线:先绘制一层按人员ID分组的无颜色区分的粗线作为底,上层再绘制不同单位的细线,重叠区域会自然露出底层的粗线,辨识度极高
- 优化配色组合:选用叠加后色差明显的互补色,比如
#F8766D(红)和#00BFC4(青),两者半透明叠加后会呈现和原色差异极大的深紫色,无需额外设置就能快速识别重叠区域
修改后可直接运行的代码
library(tidyverse) # 原有数据生成逻辑 a_id <- c(rep('A',25)) a_period <- c(seq(1, 13), seq(13,24)) a_workplace <-c(rep(1,13), rep(2,12)) b_id <- c(rep('B',19)) b_period <- c(seq(2,8), seq(13,24)) b_workplace <-c(rep(1,7), rep(2,12)) c_id <- c(rep('C',9)) c_period <- c(seq(1,4), seq(2,6)) c_workplace <-c(rep(1,4), rep(2,5)) id <- c(a_id, b_id, c_id) period <- c(a_period, b_period, c_period) workplace <- c(a_workplace, b_workplace, c_workplace) mydata <- data.frame(id, period, workplace) %>% # 直接给workplace转因子并指定水平,无需拆分数据 mutate(workplace = factor(workplace, levels = c(1,2))) ggplot(mydata, aes(period, id, group=id)) + # 底层加粗提示线,重叠区域露出该线 geom_line(linewidth = 2.5, color = "grey20") + # 上层绘制不同单位的半透明线 geom_line(aes(color = workplace), alpha = 0.7, linewidth = 1.5) + labs(x="time", y=NULL, title="Work affiliation") + scale_x_continuous(breaks = seq(0,24, by=2)) + scale_y_discrete(limits=rev) + # 选用叠加后色差大的配色 scale_color_manual(values = c("1" = "#F8766D", "2" = "#00BFC4"), labels = c("工作单位1", "工作单位2"), name = "工作单位") + theme(legend.position = c(.7, .92), legend.direction = "horizontal", legend.background = element_rect(linetype="solid", colour ="black"), panel.background = element_rect(fill = "grey97"))
效果说明
运行后可以看到人员C的重叠任职区域会明显露出深色底层线,同时叠加的半透颜色也和两个单位的原色有明显差异,完全满足识别需求,图例也会正常显示两个单位的对应颜色。
内容的提问来源于stack exchange,提问作者PaulaSpinola
相关产品推荐
相关产品推荐

