ggplot中geom_smooth设置show.legend=TRUE仍不显示图例问题
解决ggplot图例不显示的问题
你的代码里图例不显示的核心原因是:把color参数写在了aes()外面。这种写法是直接给图层指定固定颜色,不属于ggplot的"映射"逻辑,所以哪怕设置show.legend=TRUE也不会生成图例。
修复方案1:将颜色移入aes()映射
把颜色标识作为字符串放在aes()里,让ggplot识别为分组变量,再通过scale_colour_manual匹配颜色和标签:
a <- data.frame(x=seq(1,100,1), y=rnorm(100)) b <- data.frame(x=seq(1,100,1), y=rnorm(100)) graph1 <- ggplot()+ geom_smooth(data = a, aes(x, y, color = "Legend 1"), method = lm, formula = y ~ splines::bs(x, 3), se = FALSE, linewidth = 0.4)+ geom_smooth(data = b, aes(x, y, color = "Legend 2"), method = lm, formula = y ~ splines::bs(x, 3), se = FALSE, linewidth = 0.4)+ scale_colour_manual(name="", values = c("Legend 1" = "red", "Legend 2" = "blue"))
修复方案2:合并数据集(更推荐)
把两个数据集合并,新增分组列,用统一的aes()映射分组,代码更简洁易维护:
# 合并数据集并添加分组标识 combined_data <- rbind( cbind(a, group = "Legend 1"), cbind(b, group = "Legend 2") ) graph1 <- ggplot(combined_data, aes(x, y, color = group)) + geom_smooth(method = lm, formula = y ~ splines::bs(x, 3), se = FALSE, linewidth = 0.4) + scale_colour_manual(name = "", values = c("red", "blue"))
两种方案都能正常生成图例,其中第二种更符合ggplot的语法设计,后续如果要添加更多分组也更方便。
内容的提问来源于stack exchange,提问作者user23523919
相关产品推荐
相关产品推荐

