2010-03-02 13 views
3

J'essaye d'ajouter une condition à la taille de geom_point et j'ai collé mon exemple ci-dessous. Je voudrais que geom_point size soit 2 quand n_in_stat est 4 ou plus, et size = 5 quand n_in_stat est inférieur à 4. J'ai essayé de mettre une instruction ifelse dans le geom_point, mais cela a échoué. Peut-être que je ne peux pas inclure les opérateurs logiques ici et je dois créer une nouvelle colonne dans le data.frame et définir la taille à cela?Comment ajouter une condition à la taille geom_point?

geom_point (taille = ifelse (n_in_stat < 4, 5, 2)) + # essayant de définir la taille d'un ifelse

geom_point (aes (taille = n_in_stat)) + # initial mis à l'échelle linéaire

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

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

Répondre

3

scale_size_manual définit les tailles pour une variable discrète.

geom_point(aes(size =n_in_stat>4)) + scale_size_manual(values=c(2,5)) 
2

aussi vous pouvez simplement utiliser une fonction:

ff <- function(x){ifelse(x < 4, 5, 2)} 

puis changer

geom_point(aes(size = n_in_stat)) + 

avec

geom_point(aes(size = ff(n_in_stat))) + 
+0

Vous aurez probablement aussi besoin de '+ scale_size_identity' – hadley

+0

étrange, cela donne: Erreur dans eval (expr, Envir, Enclos): n'a pas pu trouver la fonction "ff" quand je l'appelle ggplot dans une autre fonction. – gkcn