Удалить легенду ggplot 2.2

Я пытаюсь сохранить легенду о одном слое (плавно) и удалить легенду другого (точки). Я попытался отключить легенды с помощью guides(colour = FALSE) и geom_point(aes(color = vs), show.legend = FALSE).

Изменить: поскольку этот вопрос и его ответы популярны, воспроизводимый пример выглядит следующим образом:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

enter image description here

Ответ 1

из r cookbook, где bp - ваш ggplot:

Удалить легенду для конкретной эстетической (заливки):

bp + guides(fill=FALSE)

Это также можно сделать при указании масштаба:

bp + scale_fill_discrete(guide=FALSE)

Это удаляет все легенды:

bp + theme(legend.position="none")

Ответ 2

Это может быть другое:
Ваш код:

geom_point(aes(..., show.legend = FALSE))

Вы можете указать параметр show.legend после вызова aes:

geom_point(aes(...), show.legend = FALSE)

то соответствующая легенда должна исчезнуть

Ответ 3

Если ваша диаграмма использует как fill и color эстетику, вы можете удалить легенду с помощью:

+ guides(fill=FALSE, color=FALSE)

Ответ 4

Поскольку ответ на вопрос и user3490026 является лучшим поисковым ударом, я сделал воспроизводимый пример и краткую иллюстрацию предложений, сделанных до сих пор, вместе с решением, которое явно решает вопрос OP.

Одна из вещей, которые делает ggplot2 и которая может сбивать с толку, заключается в том, что она автоматически смешивает определенные легенды, когда они связаны с одной и той же переменной. Например, factor(gear) появляется дважды, один раз для linetype и один раз для fill, что приводит к объединенной легенде. Напротив, gear имеет свою собственную запись легенды, поскольку она не рассматривается как то же, что и factor(gear). Предлагаемые решения обычно работают хорошо. Но иногда вам может понадобиться переопределить направляющие. Посмотрите мой последний пример внизу.

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

enter image description here

Удалить все легенды: @user3490026

p + theme(legend.position = "none")

Удалить все легенды: @duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

Отключить легенды: @Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

Удалите заливку, чтобы вид линии стал видимым

p + guides(fill = FALSE)

То же, что и выше, через функцию scale_fill_:

p + scale_fill_discrete(guide = FALSE)

И теперь один возможный ответ на запрос OP

"сохранить легенду о одном слое (гладко) и удалить легенду о другой (точке)",

Поверните некоторые на некоторых внеочередных

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

enter image description here