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

ggplot使用不同geom类型时合并图例的解决方法

ggplot不同geom图层图例合并解决方案

问题原因

图例拆分的核心原因是linetype、shape两个美学映射的分类数量与color不匹配,ggplot无法将三者识别为同一组图例分类,即便已经将三个scale的名称都设为空值。

ggplot合并图例的核心判定规则:多个美学映射的name完全相同,且分类labels的数量、顺序、取值完全一致,满足这两个条件时,无论对应geom类型是否相同,都会自动合并为同一个图例。

解决方法

给三个手动调整的scale设置完全一致的分类标签,对不存在对应美学属性的分类设置NA或blank即可,修改后的代码如下:

ggplot(data=data.frame(x=x, y=y, mass=mass)) + 
  geom_line(mapping = aes(x=x, y=y, linetype='Gompertz predicted mass', col='Gompertz predicted mass')) +
  geom_point(mapping = aes(x=x, y=mass, shape='Actual mass',col='Actual mass')) +
  theme_bw() +
  ylab('Mass') +
  xlab('t') +
  scale_color_manual(name='',
                     labels = c("Gompertz predicted mass", "Actual mass"),
                     values = c("black", "red")) +
  scale_linetype_manual(name='',
                        labels = c("Gompertz predicted mass", "Actual mass"),
                        values = c("solid", "blank")) + # 实际质量无对应线条,设为空白
  scale_shape_manual(name='',
                     labels = c("Gompertz predicted mass", "Actual mass"),
                     values = c(NA, 19)) + # 预测值无对应散点,设为不显示
  scale_x_continuous(breaks=seq(4,26,2)) +
  ylim(c(0, 20000)) +
  ggtitle('Problem 3: Plot of tumor mass with time')

原始运行效果图

生成的效果图


内容的提问来源于stack exchange,提问作者An Ignorant Wanderer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:39:01