如何为ggplot2中重叠的geom_rect添加额外图例项
在ggplot2图例中添加重叠区域的条目
要在现有图例里加入红蓝透明重叠后的颜色条目,只需两步操作:
1. 生成重叠区域的对应颜色
红(alpha=0.1)和蓝(alpha=0.1)重叠后会呈现品红色,其alpha值可通过透明色叠加公式计算:1 - (1-0.1)*(1-0.1) = 0.19,用rgb()函数直接生成该颜色:
overlap_color <- rgb(1, 0, 1, alpha = 0.19)
2. 修改颜色映射参数
在scale_fill_manual里加入第三个颜色条目,同时用breaks参数强制显示所有三个图例项:
完整代码
# library library(ggplot2) library(tidyverse) # 生成透明颜色及重叠色 adjustcolor("red", alpha.f = 0.1) -> red.tra adjustcolor("blue", alpha.f = 0.1) -> blue.tra overlap_color <- rgb(1, 0, 1, alpha = 0.19) # 数据 data <- structure(list(unclear = c(0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1), start = structure(c(12784, 13879, 9496, 17897, 11323, 12053, 16801, 16071, 17167, 17532, 16071, 11323, 11688), class = "Date"), stop = structure(c(18628, 18628, 16801, 18262, 13879, 17897, 18262, 17897, 17532, 18628, 17897, 18262, 11688), class = "Date"), group = c("R", "C", "C", "A", "A", "R", "M", "N", "N", "O", "OB", "H", "H")), class = "data.frame", row.names = c(NA, -13L)) # 绘图 ggplot(data = data)+ geom_rect(data = data %>% filter(unclear==0), aes(xmin=start, xmax=stop, ymin=0, ymax=0.7, fill="one")) + geom_rect(data = data %>% filter(unclear==1), aes(xmin=start, xmax=stop, ymin=0, ymax=0.7, fill="two"))+ scale_fill_manual( name = "colors", values = c(one = red.tra, two = blue.tra, overlap = overlap_color), labels = c("one", "two", "重叠区域"), breaks = c("one", "two", "overlap") # 强制显示所有三个图例条目 )+ facet_wrap(~group, ncol = 1, strip.position = "left")
关键说明
breaks参数用于指定图例要显示的所有键,即使第三个键没有被任何图层直接调用,也会在图例中正常呈现。- 重叠颜色的alpha值是严格按照透明色叠加规则计算的,确保和实际图层重叠后的视觉效果一致。
内容的提问来源于stack exchange,提问作者ava
相关产品推荐
相关产品推荐

