Как я могу изменить название легенды в ggplot2? [закрыто]

58

У меня есть график, который я делаю в ggplot2, чтобы суммировать данные из набора данных размером 2 x 4 x 3. Я был в состоянии сделать панели для переменной с двумя уровнями, используя facet_grid(. ~ Age)и установить оси X и Y, используя aes(x=4leveledVariable, y=DV). aes(group=3leveledvariable, lty=3leveledvariable)До сих пор я создавал сюжет. Это дает мне визуализацию, которая состоит из 2-уровневой переменной, а ось X представляет 4-уровневую переменную и различные линии, нанесенные на панели для 3-уровневой переменной. Но ключ для 3-уровневой переменной имеет название 3-уровневой переменной, и я хочу, чтобы это был заголовок, в котором есть символьное пространство. Как я могу переименовать название легенды?

То, что я пробовал, похоже, не работает (где abpмой объект ggplot2):

 abp <- abp + opts(legend.title="Town Name")
 abp <- abp + scale_fill_continuous("Town Name")
 abp <- abp + opts(group="Town Name")
 abp <- abp + opts(legend.title="Town Name")

Пример данных:

ex.data <- data.frame(DV=rnorm(2*4*3), V2=rep(1:2,each=4*3), V4=rep(1:4,each=3), V3=1:3)
russellpierce
источник
2
@drknexus - если вы можете поделиться своими данными, это было бы полезно, или указать на подобный набор данных в R, который имеет ту же форму, что и ваши данные.
Погоня
1
Все здесь, кажется, очень хорошо осведомлены, но я знаю, что по вопросам, связанным с ggplot, я считаю их группу Google невероятно полезной. groups.google.com/group/ggplot2
Дейсон
Помимо хорошо известной и превосходной документации на странице Хэдли, не очень известная ссылка на Git Hub действительно помогает в решении подобных проблем.
hans0l0
Кроме того, theme_get()предоставляет вам ту же ссылку в консоли.
Брэндон Бертельсен
1
В ответ на несколько флагов, запрашивающих миграцию SO, это фактически невозможно; Узнайте , почему на SO.meta: meta.stackexchange.com/q/8004/150510 , meta.stackexchange.com/q/151890/150510 .
хл

Ответы:

25

Другой вариант заключается в использовании

p + labs(aesthetic='custom text')     

Например, пример Чейза будет выглядеть так:

library(ggplot2)

ex.data <- data.frame(DV=rnorm(2*4*3),V2=rep(1:2,each=4*3),V4=rep(1:4,each=3),V3=1:3)
p <- qplot(V4, DV, data=ex.data, geom="line", group=V3, linetype=factor(V3)) + facet_grid(. ~ V2)
p + labs(linetype='custom title')

и получим цифру: введите описание изображения здесь

user116293
источник
В эти дни я предпочитаю использовать labs () для изменения меток, а не указывать их по шкале / оси по шкале / оси.
Russellpierce
38

Вы можете изменить название легенды, изменив масштаб этой легенды. Вот пример использования набора данных CO2

library(ggplot2)

p <- qplot(conc, uptake, data = CO2, colour = Type) + scale_colour_discrete(name = "Fancy Title")
p <- p + facet_grid(. ~ Treatment)
p 

РЕДАКТИРОВАТЬ:

Используя приведенный выше пример данных, вот рабочее решение. Я думаю, что это имитирует сюжет, который @drknexus пытается создать. В качестве примечания: если кто-то может объяснить, почему мы должны рассматривать V3 как фактор для его сопоставления с легендой, я был бы признателен.

p <- qplot(V4, DV, data = ex.data, geom = "line", group = V3, lty = factor(V3)) 
p <- p + scale_linetype_discrete(name = "Fancy Title") + facet_grid(. ~ V2)
p 

альтернативный текст

гнаться
источник
Я думаю, что мне не хватает такой функции, как scale_color_discrete, которая связана со спецификацией «group» или «lty» в ggplot (data = ex.daata, aes (x = V4, y = DV, group = V3, lty = V3) ))
russellpierce
1
Ах, я нашел это: scale_linetype_discrete (name = "bob")
russellpierce
@Chase: отредактируйте с помощью элемента scale_linetype_discrete, и я приму ваш ответ.
Russellpierce
1
@drknexus - проблема с этим в моем рабочем примере, соответствующая команда scale_colour_discrete()и код, с которым вы работаете, очевидно, немного другой. Я не знаю, что это за код ...
Погоня
3
@Chase Re: «почему мы должны рассматривать V3 как фактор» scale_linetype_discreteожидает переменную с дискретными значениями (фактор или символ, из plyr::is.discrete), посмотрите код src на Github, j.mp/ejaRRT . Хороший ответ (+1).
ЧЛ