¿Cómo puedo cambiar el título de una leyenda en ggplot2? [cerrado]

58

Tengo un diagrama que estoy haciendo en ggplot2 para resumir los datos que provienen de un conjunto de datos celulados de 2 x 4 x 3. He podido hacer paneles para la variable de 2 niveles usando facet_grid(. ~ Age)y para configurar los ejes x e y usando aes(x=4leveledVariable, y=DV). Solía aes(group=3leveledvariable, lty=3leveledvariable)producir la trama hasta ahora. Esto me da una visualización que está panelada por la variable de 2 niveles, con el eje X representando la variable de 4 niveles y diferentes líneas trazadas dentro de los paneles para la variable de 3 niveles. Pero la clave para la variable de 3 niveles se titula con el nombre de la variable de 3 niveles y quiero que sea un título que tenga un espacio de caracteres. ¿Cómo puedo cambiar el nombre del título de la leyenda?

Cosas que he probado que no parecen funcionar (¿dónde abpestá mi objeto 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")

Datos de ejemplo:

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
fuente
2
@drknexus: si puede compartir sus datos, sería útil o señalar un conjunto de datos similar dentro de R que tenga la misma forma que sus datos.
Chase
1
Todos aquí parecen estar muy bien informados, pero sé que para las preguntas relacionadas con ggplot encuentro que su grupo de google es increíblemente útil. groups.google.com/group/ggplot2
Dason
Además de la bien conocida y excelente documentación en la página de Hadley, la referencia no tan conocida en Git Hub realmente ayuda con este tipo de problemas.
hans0l0
Alternativamente, le theme_get()proporciona la misma referencia en la consola.
Brandon Bertelsen
1
En respuesta a varios indicadores que solicitan la migración de SO, en realidad es imposible; vea por qué en SO.meta: meta.stackexchange.com/q/8004/150510 , meta.stackexchange.com/q/151890/150510 .
chl

Respuestas:

25

Otra opción es usar

p + labs(aesthetic='custom text')     

Por ejemplo, el ejemplo de Chase se vería así:

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

y da la cifra: ingrese la descripción de la imagen aquí

usuario116293
fuente
En estos días, prefiero usar labs () para modificar las etiquetas en lugar de especificarlas en una escala / eje por escala / eje.
russellpierce
38

Puede cambiar el título de la leyenda modificando la escala de esa leyenda. Aquí hay un ejemplo usando el conjunto de datos de CO2

library(ggplot2)

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

EDITAR:

Usando los datos de ejemplo de arriba, aquí hay una solución de trabajo. Creo que esto imita la trama que @drknexus está tratando de crear. Como nota al margen, si alguien puede explicar por qué tenemos que tratar V3 como un factor para que se asigne a la leyenda, lo agradecería.

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 

texto alternativo

Persecución
fuente
Creo que lo que me falta es una función como scale_color_discrete que se vincula con la especificación "group" o "lty" en ggplot (data = ex.daata, aes (x = V4, y = DV, group = V3, lty = V3 ))
russellpierce
1
Ah lo encontré: scale_linetype_discrete (name = "bob")
russellpierce
@Chase: Edite con el bit scale_linetype_discrete y aceptaré su respuesta.
russellpierce
1
@drknexus: el problema con eso está en mi ejemplo de trabajo, el comando apropiado es scale_colour_discrete()y el código con el que está trabajando es obviamente un poco diferente. No sé cuál es ese código ...
Chase
3
@Chase Re: "por qué tenemos que tratar a V3 como un factor" scale_linetype_discreteespera una variable con valores discretos (factor o carácter, de plyr::is.discrete), consulte el código src en Github, j.mp/ejaRRT . Buena respuesta (+1).
chl