web-dev-qa-db-fra.com

Comment changer l'ordre des boxplots lors de l'utilisation de ggplot2?

Cette question découle de cet autre n . Je n'ai pas pu mettre en œuvre les réponses là-bas.

Définir:

df2 <- data.frame(variable=rep(c("vnu.shr","vph.shr"),each=10),
        value=seq(1:20))

Terrain:

require(ggplot2)
qplot(variable,value, data=df2,geom="boxplot")+
geom_jitter(position=position_jitter(w=0.1,h=0.1))

Je voudrais avoir les boxplots dans l'ordre inverse (par exemple, un à droite à gauche et ainsi de suite).

J'ai essayé différentes façons de réorganiser les facteurs en utilisant levels, ordered, relevel, rev et ainsi de suite, mais je n'arrive tout simplement pas à obtenir la syntaxe droite.

23
Fred

Avez-vous essayé ceci:

df2$variable <- factor(df2$variable,
    levels = c('vph.shr','vnu.shr'),ordered = TRUE)

Je viens de choisir une commande, car mon système est configuré légèrement différemment du vôtre, je suppose, donc ma `` commande par défaut '' peut différer. Mais vous pouvez simplement changer la position des niveaux lorsque vous les spécifiez.

Quelques autres options, selon vos goûts:

Pour inverser simplement l'ordre actuel:

factor(df2$variable,levels = rev(levels(df2$variable)),ordered = TRUE)

ou vous pouvez utiliser le sous-ensemble pour spécifier un ordre spécifique si vous ne voulez pas taper chaque niveau à la main:

factor(df2$variable,levels = levels(df2$variable)[1:2],ordered = TRUE)
45
joran

Vous avez déjà accepté une solution (parfaitement bien), mais voici une autre option en utilisant relevel(). Je ne sais pas pourquoi cela ne fonctionnait pas pour vous?

#default plot
ggplot(df2, aes(variable, value)) + geom_boxplot()

enter image description here

#Reverse reverse!
df2$variable2 <- with(df2, relevel(variable, "vph.shr"))
ggplot(df2, aes(variable2, value)) + geom_boxplot()

enter image description here

7
Chase