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


250

Я намагаюся зберегти легенду про один шар (гладкий) і видалити легенду про інший (крапка). Я спробував відключити легенди з 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() 

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


5
Мінімально відтворюваний приклад був би набагато простішим. У довгому рядку коду, як видається, є багато непотрібного (до цієї проблеми) коду, а також він є абсолютно невідтворюваним, як написано в даний час.
mnel

Відповіді:


445

з кулінарної книги r , де bp - ваш ggplot:

Видаліть легенду для певної естетики (заливка):

bp + guides(fill=FALSE)

Це також можна зробити, вказуючи масштаб:

bp + scale_fill_discrete(guide=FALSE)

Це видаляє всі легенди:

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

25
Як відповідь на коментар @Alex: Зауважте, що theme_bw()може заважати будь-яким визначенням, зробленим за допомогою theme(). Під час використання theme_bw()обов'язково додайте його до сюжету, перш ніж змінювати інші параметри теми.
fabern

1
але коли я роблю щось подібне bp + theme(legend.position="none") + theme_classic(), легенди повертаються. То як його видалити?
loveR

3
@loveR поставив тему_classic першим:bp + theme_classic() + theme(legend.position="none")
гіпотеза

1
Це не впливало на мій сюжет. Я успішно використовував підхід @Tjebo.
Джеймс Гіршорн

80

Для цього може бути інше рішення:
Ваш код:

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

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

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

тоді відповідна легенда повинна зникнути


3
Це дуже приємний підхід. Більш інтуїтивно зрозумілий.
патЛ

2
Це рішення, яке працювало над тим, щоб видалити літери з легенди, коли я використовував geom_text для анотування рядків кольором. Немає scale_labelкоманди (і це не має сенсу), і guide(label = FALSE)теж не працювало. Дякую!
Меліса Кі

45

Як питання, так і користувач3490026 відповідь «s є топ пошуку хіта, я зробив відтворений приклад і коротка ілюстрація пропозицій зроблено до сих пір, разом з рішенням , яке явно звертається на питання 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() 

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

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

А тепер одна можлива відповідь на запит ОП

"зберегти легенду про один шар (гладкою) та видалити легенду про інший (точка)"

Увімкніть деякий час від часу спеціальних спеціальних заходів

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

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


2
Щойно помітив, що синій колір заливки в останньому сюжеті не відображається на графіку, не впевнений, чому ...
PatrickT

Введіть warnings()після введення коду, і ви побачите причину появи синьої стрічки.
Маркус

@markus: Отримав спасибі! Я не буду намагатися редагувати приклад, оскільки питання окреме. Однак мало легенди мати легенду, seколи вона не обчислюється. Мабуть, варто
PatrickT

13

Якщо ваш графік використовує fillі colorестетику, і ви можете видалити легенду за допомогою:

+ guides(fill=FALSE, color=FALSE)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.