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

Предположим, что у меня есть 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 не имеет аргумента show.

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

Ответ 1

Вы можете использовать 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)

UPDATE

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

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")