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.
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")
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()
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")
}