指定特定颜色时ggplot图例消失的原因及解决办法
问题原因
当你在geom_point的图层参数(aes()外部)直接设置color = "grey50"时,这个硬编码的颜色会覆盖aes(color = cyl_label)的变量映射关系。ggplot的图例生成逻辑是:只有当视觉属性(比如颜色)通过aes()映射到数据变量时,才会自动创建图例;直接指定固定颜色属于对图层元素的统一样式设置,和数据变量无关联,因此不会生成图例。
解决方法
方法1:通过scale_color_manual自定义映射颜色(推荐)
保留aes()内的颜色变量映射,用scale_color_manual来指定对应变量值的颜色,既满足自定义颜色需求,又能保留图例:
mtcars_new <- mtcars %>% mutate(cyl_label = if_else(cyl > 6, "High CYL", ""), carb_label = if_else(carb > 6, "High CARB", "")) p <- mtcars_new %>% ggplot(aes(x = hp, y = mpg)) + geom_point(size = 3, color = "green4") # 修改后的代码 p + geom_point(data = mtcars_new %>% filter(cyl_label == "High CYL"), mapping = aes(color = cyl_label), size = 3) + scale_color_manual(values = "grey50")
方法2:统一映射所有分组的颜色(若需将绿色点也纳入图例)
如果希望把初始的绿色普通点和灰色高缸数点都显示在图例中,可以将所有点的颜色都通过aes()映射到分组变量,再统一设置颜色:
mtcars_new <- mtcars %>% mutate(cyl_group = case_when( cyl > 6 ~ "High CYL", TRUE ~ "Normal" )) ggplot(mtcars_new, aes(x = hp, y = mpg, color = cyl_group)) + geom_point(size = 3) + scale_color_manual(values = c("Normal" = "green4", "High CYL" = "grey50"))
内容的提问来源于stack exchange,提问作者Pss
相关产品推荐
相关产品推荐

