Удалить легенду 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() 

4 ответа

Из поваренной книги, где bp - ваш ggplot:

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

bp + guides(fill=FALSE)

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

bp + scale_fill_discrete(guide=FALSE)

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

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

Там может быть другое решение этого:
Ваш код был:

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

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

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

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

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

Одна из вещей, которые 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() 

введите описание изображения здесь

Удалить все легенды: @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)

А теперь один возможный ответ на запрос ОП

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

Включите некоторые из специальных ad-hoc

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

введите описание изображения здесь

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

+ guides(fill=FALSE, color=FALSE)
Другие вопросы по тегам