首页 > 解决方案 > 在ggplot2中隐藏单个geom的图例

问题描述

我将相同的变量(颜色)映射到两个不同几何图形中的颜色。我希望它们要么出现在单独的图例(DHJ 和 EFI)中,要么最好完全跳过第二个图例(对于 E、F 和 I)。目前,R 将两者混合在一起,并给了我一个按字母顺序列出所有混合在一起的 DEFHIJ 的图例。

基本上,我想将今天的点绘制到一些使用标准数据集的平滑线上。我不希望平滑线有图例 - 我们都熟悉它们,它们是我们所有图表的标准。我只想要一个点的传说。

我已经show.legend = FALSE按照其他地方的建议进行了尝试,但这似乎没有效果。 guides(color = FALSE)删除整个图例。

代表:

library(tidyverse)

set1 <- diamonds %>%
  filter(color %in% c("D", "H", "J")) 

set2 <- diamonds %>%
  filter(color %in% c("E", "F", "I")) 

ggplot() +
  geom_point(data = set1, 
             aes(x = x, y = y, color = color)) +
  geom_smooth(data = set2, 
              show.legend = FALSE, 
              aes(x = x, y = y, color = color))

这是生成的图表。它在图例中包含全部 6 个字母,而不仅仅是 DHJ。 在此处输入图像描述

标签: rggplot2

解决方案


如果您希望图例仅显示来自一个数据集的颜色,您可以通过将breaksin设置scale_color_discrete()为这些值来实现。

... +
     scale_color_discrete(breaks = unique(set1$color) )

如果您不使用线条的颜色,因为这是标准背景信息,您可以使用groupingeom_smooth()而不是color. (另请参阅linetype您是否希望能够区分线条。)

ggplot() +
     geom_point(data = set1, 
                aes(x = x, y = y, color = color)) +
     geom_smooth(data = set2, 
                 aes(x = x, y = y, group = color)) 

推荐阅读