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

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

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")

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

enter image description here

Ответ 1

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

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")

Ответ 2

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

 + labs(color='NEW LEGEND TITLE') 

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

+ labs(fill='NEW LEGEND TITLE') 

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

Ответ 3

Поскольку у вас две плотности, я думаю, вы можете захотеть установить свои собственные цвета с помощью 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"))

enter image description here

Ответ 4

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

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

labs(color = "sale year")

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

labs(color = 'sale year\n")

Ответ 5

Так как в вашем коде вы использовали 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.

Ответ 6

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

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

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

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

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

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

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

Ответ 7

Просто чтобы добавить в список (другие варианты здесь не помогли мне), вы также можете использовать функцию update_labels для ggplot:

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

update_labels(p, list(colour="MY NEW LEGEND TITLE")

Это также позволит вам изменить метки x- и оси Y отдельными строками:

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")

Ответ 8

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

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

Ответ 9

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

read.table(sep = '\t')

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

read.csv()

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

Ответ 10

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

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