web-dev-qa-db-ja.com

R:データフレームの列を使用して複数のボックスプロットをプロットする

データフレームの無関係な列ごとに個別のボックスプロットをプロットしたいと思います。 sfsmsicパッケージの_boxplot.matrix_を使用して正しい方向に進んでいると思いましたが、boxplot(as.matrix(plotdata)と同じように動作し、共有ボックスプロットのすべてを軸上の共有スケール。 (たとえば)5つの個別のプロットが必要です。

私はこれを手で行うことができます:

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

しかし、データフレーム列を使用する方法が必要ですか?

編集:私は反復を使用しました、私の答えを見てください。

13
gisol

reshapeパッケージを使用して物事を簡素化できます

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)

またはggplot2物事をより良くするためのパッケージ

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

?boxplotから、データの複数のベクトルをリストの要素として渡すオプションがあり、リスト内の各ベクトルに1つずつ、複数のボックスプロットを取得することがわかります。

したがって、必要なのは、マトリックスの列をリストに変換することだけです。

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

本当に1つの箱ひげ図のある個別のパネルが必要な場合(率直に言って、なぜそうしたいのかわかりません)、代わりにggplotとファセットに切り替えます。

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

これを行うために反復を使用しました。たぶん、元の質問でははっきりしていなかったと思います。それでもなお、回答に感謝します。

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

}
3
gisol