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

193

У меня есть следующий график, как показано ниже. Он был создан с помощью этой команды:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

Теперь следующая вещь, которую я хочу сделать, - изменить название легенды от cond в НОВОЕ НАЗВАНИЕ ЛЕГЕНДЫ.

Итак, что я сделал, просто добавьте следующую строку, добавив конец вышеуказанного кода:

+labs(colour="NEW LEGEND TITLE")

Но это не сработает. Каков правильный способ сделать это?

Изображение 296

  • 70
    labs(fill="xyz") должны делать
  • 1
    @baptiste Я возвращался к этому вопросу несколько раз, не замечая вашего комментария, не могли бы вы написать его в качестве ответа? ИМО это самое простое решение и заслуживает некоторого признания
Показать ещё 2 комментария
Теги:
ggplot2
plot

9 ответов

266
Лучший ответ

Это должно работать:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(или альтернативно)

p + scale_fill_discrete(name = "New Legend Title")
  • 7
    Другая альтернатива - p$labels$fill <- "New Legend Title"
  • 1
    в чем разница между направляющими и scale_fill_discrete
Показать ещё 2 комментария
134

Я не много вникал в это, но потому, что вы использовали fill = cond в ggplot(),

 + labs(color='NEW LEGEND TITLE') 

возможно, не сработало. Однако он заменяет цвет на заполнять, он работает!

+ labs(fill='NEW LEGEND TITLE') 

Это работало для меня в ggplot2_2.1.0

P.S. Я бы прокомментировал, но моей репутации stackoverflow недостаточно, чтобы комментировать.

  • 13
    Я думаю, что это самый верный ответ, он делает именно то, что запрашивает OP, но не более чем с одной дополнительной строкой.
  • 1
    оба цвета = и заполнить = должны работать. Это «правильный» ответ на вопрос, ИМО
Показать ещё 2 комментария
36

Поскольку у вас две плотности, я думаю, вы можете захотеть установить свои собственные цвета с помощью scale_fill_manual.

Если так вы можете сделать:

df <- data.frame(x=1:10,group=c(rep("a",5),rep("b",5)))

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

Изображение 4330

12

Так как в вашем коде вы использовали ggplot(data, fill= cond) для создания гистограммы, вам нужно добавить заголовок легенды, также используя "fill" в разделе метки, т.е. +labs(fill="Title name"). Если вы использовали другой тип графика, где код был ggplot (data, color = cond), вы могли бы использовать +labs(colour= "Title Name"). Таким образом, аргумент lab должен соответствовать аргументу aes.

Я использовал + guides(fill=guide_legend("my awesome title")), чтобы изменить заголовок легенды на графиках geom_bar, но он не работал для geom_point.

  • 0
    ..., но для geom_point() это работает для меня: guides(color=guide_legend("Type:"))
  • 1
    @knb, ваш метод работает: guides(color=guide_legend("Score Ranking:"))
Показать ещё 1 комментарий
11

Ни один из приведенных выше кодов не работает для меня.

Вот что я нашел и это сработало.

labs(color = "sale year")

Вы также можете указать пробел между заголовком и дисплеем, добавив \n в конце.

labs(color = 'sale year\n")

  • 0
    Ухоженная. Это сработало для меня и было несложным
  • 1
    Чем это отличается от этого ответа ?
4

Есть еще один очень простой ответ, который может работать для некоторых простых графиков.

Просто добавьте вызов guide_legend() в свой график.

ggplot(...) + ... + guide_legend(title="my awesome title")

Как показано в очень хороших документах ggplot.

Если это не сработает, вы можете более точно установить параметры вашего путеводителя с помощью вызова руководств:

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

Вы также можете изменить форму/цвет/размер, указав эти параметры для вызова guides.

  • 4
    не работает, когда существует более одной легенды.
  • 24
    У меня это не сработало, но qplot(…) + guides(color=guide_legend(title="sale year"))
Показать ещё 1 комментарий
1

Я использую facet_wrap в своем ggplot, и ни один из предложенных решений не работал у меня, кроме решения ArnaudA:

qplot(…) + guides(color=guide_legend(title="sale year")) 
0

Многие люди тратят много времени на изменение меток, меток легенд, заголовков и названий оси, потому что они не знают, что в R можно загрузить таблицы с пробелами " ". Однако вы можете сделать это, чтобы сэкономить время или уменьшить размер вашего кода, указав разделители при загрузке таблицы, которая, например, разделена вкладками (или любым другим разделителем, отличным от значения по умолчанию, или одним пробелом):

read.table(sep = '\t')

или используя параметры загрузки по умолчанию в формате csv:

read.csv()

Это означает, что вы можете напрямую сохранить имя "NEW LEGEND TITLE" в качестве имени столбца (заголовка) в исходном файле данных, чтобы избежать указания нового заголовка легенды на каждом графике.

-1

Вы также можете добавить одну строку (последняя строка):

ggplot(df, aes(x=rating, fill=cond)) + 
  geom_density(alpha = .3) +
  xlab("NEW RATING TITLE") +
  ylab("NEW DENSITY TITLE") +
  labs(fill = "Your Title")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню