ggplot2中仅修改分类变量单个层级的图例形状
实现方法
问题根源是你将colour = peaks放在全局美学映射中时,geom_pointrange()会默认对所有分组应用「点+误差线」的几何样式,哪怕eprint_peaks组的误差值全为NA,图例也会统一沿用pointrange的默认样式。
你可以用两种方式实现目标效果:
方法1:拆分图层(推荐,稳定性最高)
将两个分组拆分为独立的绘图图层,eprint_peaks仅用geom_point()绘制圆点,mean_random_peaks用geom_pointrange()绘制点加误差线,两个图层共用colour映射即可自动生成正确的图例:
library(ggplot2) library(data.table) ggplot(data = dat, aes(x = factor(overlaps))) + # 绘制eprint_peaks层,仅圆点 geom_point( data = ~.x[peaks == "eprint_peaks"], aes(y = cm_pct, colour = peaks), size = 2 ) + # 绘制mean_random_peaks层,点+误差线 geom_pointrange( data = ~.x[peaks == "mean_random_peaks"], aes(y = cm_pct, ymin = cm_pct - pct_sd - 0.5, ymax = cm_pct + pct_sd + 0.5, colour = peaks), size = 0.8, fatten = 2.5 # fatten控制点的相对大小,和上层圆点尺寸匹配 ) + scale_x_discrete( name = "overlaps", breaks = seq_along(1:12), labels = paste0('\u2265', seq_along(1:12)) ) + theme_classic(base_size = 13) + scale_colour_grey( labels = c("eprint_peaks" = "eprint\npeaks", "mean_random_peaks" = "random\npeaks") ) + labs(y = 'cumulative percentage', colour = NULL) + # 注意这里映射的是colour不是fill theme( legend.position = "top", legend.key.size = unit(1, 'cm') )
这种方法不需要手动调整图例参数,只要图层的美学映射一致,ggplot2会自动合并图例,同时你可以单独调整两个图层的点大小、线条粗细等参数,不会互相影响。
方法2:手动覆盖图例属性
如果不想拆分图层,可以在guides()中通过override.aes给不同图例项单独设置样式,注意参数向量的顺序必须和peaks因子的水平顺序完全一致:
ggplot(mapping = aes(x=factor(overlaps),y=cm_pct,colour=peaks),data = dat) + geom_pointrange(aes(ymin=cm_pct-pct_sd-.5,ymax=cm_pct+pct_sd+.5), fatten = 2.5) + scale_x_discrete(name="overlaps",breaks=seq_along(1:12),labels=paste0('\u2265',seq_along(1:12))) + theme_classic(base_size = 13) + scale_colour_grey(labels=c("eprint_peaks"="eprint\npeaks","mean_random_peaks"="random\npeaks")) + labs(y='cumulative percentage',colour=NULL) + theme(legend.position = "top", legend.key.size = unit(1,'cm')) + guides(colour = guide_legend( override.aes = list( linetype = c(0, 1), # 第一个分组(eprint)隐藏误差线,第二个显示 size = c(1.5, 0.8) # 匹配点和线条的尺寸 ) ))
注意:你原代码中
labs(fill = NULL)是无效的,因为当前映射的美学是colour而非fill,需要改成colour = NULL才能正常隐藏图例标题。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

