You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:07:10