2010-02-26 13 views
5

Tengo un diagrama (código de muestra pegado debajo) que estoy tratando de agregar por etiquetas propias para la información de la serie. En lugar de trazar "p1s1" "p1s2" "p3s4", me gustaría "tratamiento 1" "tratamiento 2" "tratamiento 3". He usado los niveles (series_id) para obtener los nombres únicos de las series y he usado una tabla de búsqueda para obtener las descripciones. (Creo que esto los ubica en el mismo orden en que se trazaron?) Y tengo estas descripciones en un vector llamado treatment_descriptions.¿Cómo agregar etiquetas de series personalizadas a una leyenda en ggplot de R?

Según la documentación, creo que debería usar una escala aquí, pero no puedo determinar cuál, o cómo hacerlo. Algo como: scale_something (name = "Descripciones de tratamiento", breaks = NULL, labels = treatment_descriptions, formatter = NULL)? Pero, ¿a dónde debería ir esto?

library(ggplot2) 

# Create a long data.frame to store data... 
growth_series = data.frame ("read_day" = c(0, 3, 9, 0, 3, 9, 0, 2, 8), 
"series_id" = c("p1s1", "p1s1", "p1s1", "p1s2", "p1s2", "p1s2", "p3s4", "p3s4", "p3s4"), 
"mean_od" = c(0.6, 0.9, 1.3, 0.3, 0.6, 1.0, 0.2, 0.5, 1.2), 
"sd_od" = c(0.1, 0.2, 0.2, 0.1, 0.1, 0.3, 0.04, 0.1, 0.3), 
"n_in_stat" = c(8, 8, 8, 8, 7, 5, 8, 7, 2) 
) 

> # Now gives us some example long form data... 
> > growth_series 
> read_day series_id mean_od sd_od  n_in_stat 
> 1  p1s1  0.6  0.10   8 2  
> 3  p1s1  0.9  0.20   8 3  
> 9  p1s1  1.3  0.20   8 4  
> 0  p1s2  0.3  0.10   8 5  
> 3  p1s2  0.6  0.10   7 6  
> 9  p1s2  1.0  0.30   5 7  
> 0  p3s4  0.2  0.04   8 8  
> 2  p3s4  0.5  0.10   7 9  
> 8  p3s4  1.2  0.30   2 2 

# Plot using ggplot... 
ggplot(data = growth_series, aes(x = read_day, y = mean_od, group = series_id, color = series_id)) + 
geom_line(size = 1.5) + 
geom_point(aes(size = n_in_stat)) + 
geom_errorbar(aes(ymin = mean_od - sd_od, ymax = mean_od + sd_od), size = 1, width = 0.3) + 
xlab("Days") + ylab("Log (O.D. 730 nm)") + 
scale_y_log2() + 
scale_colour_hue('my legend', breaks = levels(growth_series$series_id), labels=c('t1', 't2', 't3')) 

Respuesta

5

Tal vez puedas volver a etiquetar tu factor?

growth_series$series_id <- factor(
    growth_series$series_id, 
    labels=c('treatment 1', 't2', 't3')) 

O si todavía está buscando scale_something, debe ser scale_colour_hue()

... + scale_colour_hue('my legend', 
    breaks = levels(growth_series$series_id), 
    labels=c('t1', 't2', 't3')) 
+0

Gracias, la primera sugerencia trabajó, el segundo no, voy a mantener abierta la pregunta por el momento, como creo que debería haber una mejor manera de hacerlo. Mis descripciones son bastante largas, por lo que tenerlas en la mesa así se ve muy feo, pero supongo que no tengo que ponerlas en la mesa hasta justo antes de trazar, así que no es gran cosa. Cheers, John – John

+0

¿Qué pasa con el segundo? Por cierto, el "..." representa tu grupo de ggplot() + geom_line + .. + scale_y_log2 – xiechao

+0

Claro, lo intenté, pero recibí un error de sintaxis, ¿te funcionó? – John

Cuestiones relacionadas