удалить заголовок легенды в ggplot


111

Я пытаюсь удалить название легенды в ggplot2:

df <- data.frame(
  g = rep(letters[1:2], 5),
  x = rnorm(10),
  y = rnorm(10)
)

library(ggplot2)
ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom")

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

Я видел этот вопрос, и ни одно из предложенных здесь решений не работает для меня. Большинство из них выдают ошибку о том, как optsустарело и использовать themeвместо этого. Я также пробовал различные варианты theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank), сообщения и т.д. Типичные ошибки:

'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)
'theme_blank' is deprecated. Use 'element_blank' instead. (Deprecated; last used in version 0.9.1)

Я использую ggplot2впервые с момента выпуска версии 0.9.3, и мне трудно ориентироваться в некоторых изменениях ...


5
Вы можете использовать labs()для этого: Добавьте строку labs(colour = "")в свой код, которая создала график выше.
Деннис

Ответы:


192

Вы почти у цели: просто добавьте theme(legend.title=element_blank())

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank())

Эта страница в Cookbook for R дает множество подробностей о том, как настраивать легенды.


2
Это удалит все заголовки легенды. Для более локального управления guide = guide_legend()команда работает. Чтобы удалить заголовок легенды заливки, но сохранить заголовок цветной легенды, напримерscale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
PatrickT

9

Это тоже работает, а также демонстрирует, как изменить заголовок легенды:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")

7
Это заменяет заголовок пустой строкой и, следовательно, вызывает дополнительное пространство между меткой и блоком легенды, которое было бы видимым только в том случае, если бы у легенды было поле или фон цвета, отличного от того, где он расположен. Так что это нормально для быстрого и готового подхода в простых случаях, например, theme_bw()но не лучший в тех случаях, когда легенда имеет рамку вокруг нее и расположена где-то в области графика (мой обычный подход).
PatrickT

1
+1 за наблюдение. У меня возникла проблема с использованием двух разных легенд и пробелов между ними, созданных вышеуказанным решением. Установка scale_color_manual(name=element_blank())+для нижней легенды решила это для меня
Жоаоаль 05

@joaoal, element_blank()кажется, рекомендуемый подход. Настройка name = NULL - это другой способ.
PatrickT

1

Другой вариант использования labsи установки цвета NULL.

ggplot(df, aes(x, y, colour = g)) +
  geom_line(stat = "identity") +
  theme(legend.position = "bottom") +
  labs(colour = NULL)

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


0

Для Error: 'opts' is deprecated. theme()Вместо этого используйте . (Несуществующий; последний раз использовался в версии 0.9.1) 'Я заменил opts(title = "Boxplot - Candidate's Tweet Scores")на labs(title = "Boxplot - Candidate's Tweet Scores"). Это сработало!


0

Поскольку в сюжете может быть более одной легенды, способ выборочно удалить только одно из заголовков, не оставляя пустого места, состоит в том, чтобы установить для nameаргумента scale_функции значение NULL, т.е.

scale_fill_discrete(name = NULL)

(Престижность @pascal за комментарий к другой теме )

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.