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