2010-02-26 14 views
5

Ho un grafico (codice di esempio incollato di seguito) che sto cercando di aggiungere dalle proprie etichette per le informazioni sulla serie. Invece di tracciare "p1s1" "p1s2" "p3s4", mi piacerebbe "trattamento 1" "trattamento 2" "trattamento 3". Ho usato i livelli (series_id) per ottenere i nomi di serie univoci e ho usato una tabella di ricerca per ottenere le descrizioni. (Penso che questo li trovi nello stesso ordine in cui sono tracciati?) E ho queste descrizioni in un vettore chiamato treatment_descriptions.Come aggiungere etichette serie personalizzate a una legenda in R ggplot?

Dalla documentazione penso che dovrei usare una scala qui, ma non riesco a capire quale, o come farlo. Qualcosa come: scale_qualcosa (name = "Descrizioni trattamento", breaks = NULL, labels = treatment_descriptions, formattatore = NULL)? Ma dove dovrebbe andare?

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

risposta

5

forse si può relabel il tuo fattore?

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

Oppure, se si sta ancora cercando scale_something, dovrebbe essere scale_colour_hue()

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

Grazie, il primo suggerimento ha funzionato, la seconda non ha, terrò la questione aperta, per ora, come penso che ci dovrebbe essere un modo migliore per farlo. Le mie descrizioni sono piuttosto lunghe, quindi averli sul tavolo sembra davvero brutto, ma immagino di non doverli mettere sul tavolo fino a poco prima che io trama, quindi non è un grosso problema. Cheers, John – John

+0

Cosa c'è di sbagliato con il secondo? A proposito, il "..." rappresenta il tuo gruppo di ggplot() + geom_line + .. + scale_y_log2 – xiechao

+0

Certo, ci ho provato, ma ho un errore di sintassi, ha funzionato per te? – John

Problemi correlati