在ggplot2中隐藏单个几何图形的图例

时间:2018-07-03 13:47:32

标签: r ggplot2

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

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

我已经按照其他地方的建议尝试过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)) 删除了整个图例。

代表:

{{1}}

这是生成的图。图例中包含所有6个字母,而不仅仅是DHJ。 enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

如果您不使用线条的颜色,因为这是标准的背景信息,则可以通过在group中使用geom_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))