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
相关产品推荐
相关产品推荐

