2010-02-26 27 views
5

Mam działki (przykładowy kod wklejony poniżej), które próbuję dodać przez własne etykiety do informacji o serii. Zamiast wykreślać "p1s1" "p1s2" "p3s4", chciałbym "leczenie 1" "leczenie 2" "leczenie 3". Użyłem poziomów (serial_id), aby uzyskać unikalne nazwy serii i użyłem tabeli odnośników, aby uzyskać opisy. (Myślę, że to robi je w tej samej kolejności, w jakiej są one drukowane?) I mam te opisy w wektorze o nazwie opisy leczenia.Jak dodać niestandardowe etykiety serii do legendy w Ggplot R?

Z dokumentacji uważam, że powinienem używać tutaj skali, ale nie mogę określić, która z nich, ani jak to zrobić. Coś jak: scale_something (name = "Opisy leczenia", breaks = NULL, labels = treatment_descriptions, formatter = NULL)? Ale gdzie to powinno pójść?

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

Odpowiedz

5

Może możesz zmienić swój współczynnik?

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

Albo jeśli nadal szuka scale_something powinno być scale_colour_hue()

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

Dzięki pierwsza sugestia pracował, drugi nie, będę na pytanie otwarte do tej pory ponieważ uważam, że powinien istnieć lepszy sposób na zrobienie tego. Moje opisy są dość długie, więc posiadanie ich w takim stoliku wygląda naprawdę paskudnie, ale myślę, że nie muszę ich wkładać do stołu, dopóki nie spiskuję, więc to nie jest wielka sprawa. Pozdrawiam, John – John

+0

Co jest nie tak z drugim? Nawiasem mówiąc, "..." reprezentuje twoją grupę ggplot() + geom_line + .. + scale_y_log2 – xiechao

+0

Oczywiście, próbowałem, ale dostaję błąd składni, czy to działa dla ciebie? – John

Powiązane problemy