如何在R的ggplot中合并形状与颜色图例(含scale_colour_brewer())
解决ggplot2中颜色与形状图例合并的问题
要合并颜色和形状图例,核心是让两个美学映射(colour和shape)的图例名称一致,同时移除guides(shape='none'),ggplot会自动将绑定到同一变量的同名称图例合并。
修改后的代码
require(ggplot2) dat = data.frame( Type = c('T1', 'T1', 'T2', 'T2', 'T3', 'T3'), Condition = c('C1', 'C2', 'C1', 'C2', 'C1', 'C2'), Estimate = c(12.9, 13.4, 13.1, 13.6, 13.1, 13.8), lo95CI = c(12.0, 12.5, 12.2, 12.7, 12.1, 12.8), hi95CI = c(14.0, 14.5, 14.2, 14.7, 14.1, 14.8), Data = c(0.9, 1.1, 1.9, 2.1, 2.9, 3.1) ) p1 <- ggplot(data=dat, aes(x=Data, y=Estimate, group=Condition)) + coord_cartesian(ylim=c(11,15)) + geom_point(aes(shape=Condition, colour=Condition), size=3) + geom_errorbar(width=.12, linewidth=.5, aes(ymin=lo95CI, ymax=hi95CI, colour=Condition)) + scale_colour_brewer('Task:', palette='Dark2') + # 添加这一行,让形状图例的名称和颜色图例一致 scale_shape_discrete(name='Task:') + scale_x_continuous('Stimulus Type', breaks=c(1, 2, 3, 4), labels=c('T1', 'T2', 'T3', 'T4')) + scale_y_continuous('DV') + # 移除guides(shape='none') theme(axis.text=element_text(size=12), axis.title=element_text(size=14), legend.text=element_text(size=10), plot.title=element_text(hjust=0.5)) p1
原理说明
当colour和shape都映射到同一个变量(这里是Condition),并且它们对应的图例名称完全相同时,ggplot会识别出这两个图例属于同一分组维度,自动合并成一个图例——每个条目同时显示对应颜色的形状标记,既保留颜色区分,也展示形状差异。
内容的提问来源于stack exchange,提问作者striatum
相关产品推荐
相关产品推荐

