web-dev-qa-db-fra.com

R: Tracer plusieurs tracés de boîte en utilisant des colonnes du bloc de données

Je voudrais tracer une boîte à moustaches INDIVIDUELLE pour chaque colonne non liée dans un bloc de données. Je pensais que j'étais sur la bonne voie avec boxplot.matrix Du package sfsmsic, mais il semble faire la même chose que boxplot(as.matrix(plotdata) qui est de tout tracer dans un boxplot partagé avec une échelle partagée sur l'axe. Je veux (disons) 5 parcelles individuelles.

Je pourrais le faire à la main comme:

par(mfrow=c(2,2))
boxplot(data$var1
boxplot(data$var2)
boxplot(data$var3)
boxplot(data$var4)

Mais il doit y avoir un moyen d'utiliser les colonnes du bloc de données?

EDIT: J'ai utilisé des itérations, voir ma réponse.

13
gisol

Vous pouvez utiliser le package reshape pour simplifier les choses

data <- data.frame(v1=rnorm(100),v2=rnorm(100),v3=rnorm(100), v4=rnorm(100))
library(reshape)
meltData <- melt(data)
boxplot(data=meltData, value~variable)

ou même alors utilisez ggplot2 package pour rendre les choses plus agréables

library(ggplot2)
p <- ggplot(meltData, aes(factor(variable), value)) 
p + geom_boxplot() + facet_wrap(~variable, scale="free")
16
Jase_

De ?boxplot nous voyons que nous avons la possibilité de passer plusieurs vecteurs de données comme éléments d'une liste, et nous obtiendrons plusieurs boîtes à moustaches, une pour chaque vecteur de notre liste.

Il nous suffit donc de convertir les colonnes de notre matrice en liste:

m <- matrix(1:25,5,5)
boxplot(x = as.list(as.data.frame(m)))

Si vous voulez vraiment des panneaux séparés chacun avec un seul boxplot (bien que, franchement, je ne vois pas pourquoi vous voudriez faire ça), je préfère me tourner vers ggplot et facettage:

m1 <- melt(as.data.frame(m))
library(ggplot2)
ggplot(m1,aes(x = variable,y = value)) + facet_wrap(~variable) + geom_boxplot()
9
joran

J'ai utilisé l'itération pour ce faire. Je pense que je n'ai peut-être pas été clair dans la question initiale. Merci pour les réponses.

par(mfrow=c(2,5))
for (i in 1:length(plotdata)) {
        boxplot(plotdata[,i], main=names(plotdata[i]), type="l")

}
3
gisol