Boxplot par rapport à deux facteurs utilisant ggplot2 dans R

13

Je suis très nouveau dans R et dans tous les packages de R. J'ai regardé la documentation de ggplot2 mais je n'ai pas trouvé ça. Je veux une boîte à moustaches de variable boxthispar rapport à deux facteurs f1et f2. C'est suppose que les deux f1et f2sont des variables de facteur et chacun d'eux prend deux valeurs et boxthisest une variable continue. Je veux obtenir 4 boîtes à moustaches sur un graphique, chacune correspondant à une combinaison parmi les combinaisons possibles f1et f2possibles. Je pense qu'en utilisant la fonctionnalité de base dans R, cela peut être fait par

> boxplot(boxthis ~ f1 * f2 , data = datasetname) 

Merci d'avance pour votre aide.

Curious2learn
la source
Veuillez fournir des exemples de données afin d'obtenir des réponses précises.
mpiktas
2
Cette question serait presque certainement mieux adaptée à stackoverflow.com, car il y a peu de statistiques spécifiques ici.
richiemorrisroe

Réponses:

23

Je peux penser à deux façons d'y parvenir:

1. Créez toutes les combinaisons de f1et en f2dehors de la ggplotfonction

library(ggplot2)

df <- data.frame(f1=factor(rbinom(100, 1, 0.45), label=c("m","w")), 
                 f2=factor(rbinom(100, 1, 0.45), label=c("young","old")),
                 boxthis=rnorm(100))

df$f1f2 <- interaction(df$f1, df$f2)

ggplot(aes(y = boxthis, x = f1f2), data = df) + geom_boxplot()

entrez la description de l'image ici

2. utilisez color / fill / etc.

ggplot(aes(y = boxthis, x = f2, fill = f1), data = df) + geom_boxplot()

entrez la description de l'image ici

Bernd Weiss
la source
4
(+1) J'aime l'utilisation de interaction(). À noter, nous pouvons spécifier geom_boxplot(position = position_dodge(width = .9))d'ajouter de l'espace supplémentaire entre les boîtes à moustaches.
chl
1
Vous pouvez également utiliser l' dodgeargument dans la ggplotfonction -ggplot(aes(y = boxthis, x = f2, fill = f1, dodge=f1), data = df) + geom_boxplot()
Maciej
0

Voici une autre façon:

ggplot(datasetname) + boxplot(aes(x=as.factor(f1),y=boxthis)) + facet_wrap(~as.factor(f2), nrow=5)

Donne quelque chose comme ceci:

Intrigue à facettes

Richard
la source