Отключение некоторых легенд в ggplot

221

Предположим, у меня есть ggplot с несколькими легендами.

mov <- subset(movies, length != "")
(p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()
)

Я могу отключить отображение всех легенд, как это:

(p1 <- p0 + theme(legend.position = "none"))

Переход show_guide = FALSEк geom_point(согласно этому вопросу ) отключает легенду формы.

(p2 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point(show_guide = FALSE)
)

Но что, если я хочу отключить цветовую легенду вместо этого? Похоже, нет способа определить, к show_guideкакой легенде следует применять ее поведение. И нет никаких show_guideаргументов в пользу весов или эстетики.

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  scale_colour_discrete(show_guide = FALSE) +
  geom_point()
)
# Error in discrete_scale

(p4 <- ggplot(mov, aes(year, rating, shape = mpaa)) +
  aes(colour = length, show_guide = FALSE) +
  geom_point()
)
#draws both legends

Этот вопрос предполагает, что современный (начиная с ggplot2 v0.9.2) способ управления легендами заключается в использовании guidesфункции.

Я хочу быть в состоянии сделать что-то вроде

p0 + guides(
  colour = guide_legend(show = FALSE) 
)

но guide_legendне имеет аргумента шоу.

Как мне указать, какие легенды отображаются?

Ричи Коттон
источник
6
После недавнего ggplot2обновления show_guideбыл объявлен устаревшим и заменен на show.legend.
PatrickT

Ответы:

296

Вы можете использовать guide=FALSEв scale_..._...()для подавления легенды.

Для вашего примера вы должны использовать, scale_colour_continuous()потому что lengthэто непрерывная переменная (не дискретная).

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
   scale_colour_continuous(guide = FALSE) +
   geom_point()
)

Или с помощью функции guides()вы должны установить FALSEдля этого элемента / эстетическая , что вы не хотите выглядеть как легенда, например, fill, shape, colour.

p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()    
p0+guides(colour=FALSE)

ОБНОВИТЬ

Оба предоставленных решения работают в новой ggplot2версии 2.0.0, но moviesнабор данных больше не присутствует в этой библиотеке. Вместо этого вы должны использовать новый пакет, ggplot2moviesчтобы проверить эти решения.

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")
Дидзис Элфертс
источник
6
Scale_colour_continuous (guide = FALSE) не работает в ggplot2 0.9.3, но направляющие (color = FALSE) решают проблему. Большое спасибо Дидзис!
Николай Ненов
1
@NikolayNenov Странно, потому что у меня оба решения работают с ggplot2 0.9.3.1
Дидзис Элфертс
9
Я хочу удалить легенду об альфе . guides(alpha=FALSE)Покажи фокус. Спасибо, Дидзис.
10
3
Примечание для себя: если у вас есть geom_linerange()и легенда показывает крест вместо линии, вставьте show.legend=FALSEвнутрь geom_linerange().
PatrickT
25

Вы можете просто добавить show.legend=FALSEв geom, чтобы скрыть соответствующую легенду

fc9.30
источник