2012-07-05 142 views
7

我想繪製數據框中每個不相關列的INDIVIDUAL箱圖。我以爲自己在boxplot.matrixboxplot.matrix的正確軌道上,但它似乎與boxplot(as.matrix(plotdata)一樣,它將所有內容都繪製在共享軸上的共享比例圖中。我想(說)5個人的情節。R:使用數據幀中的列繪製多個箱圖

我可以像手這樣做:

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

但一定要使用數據框架柱的方法嗎?

編輯:我用迭代,看到我的答案。

回答

2

我用迭代來做到這一點。我想也許我原來的問題並不清楚。謝謝你的迴應。

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

} 
7

?boxplot我們看到我們可以選擇將多個數據向量作爲列表元素傳遞,我們將獲得多個箱形圖,其中每個箱形圖對應於我們列表中的每個矢量。

所以我們需要做的是我們的矩陣的列轉換爲一個列表:

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

如果你真的想每個單獨的面板用單箱線圖(雖然,坦白地說,我不明白爲什麼你想這樣做),我會轉而用ggplot和刻面:

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

-1通過閱讀文檔作弊! ;-) – 2012-07-05 14:57:58

+0

使用它仍會返回一個包含多個x類別的單個圖。我試圖爲矩陣中找到的每個x類別製作單獨的圖。 (x = as.list(as.data.frame(plotdata)))'是我使用的代碼,其中plotdata是一個... x9雙重矩陣。 – gisol 2012-07-05 15:12:40

+0

@gisol看我的編輯。 – joran 2012-07-05 15:19:08

10

您可以使用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") 
+0

'melt'和'stack'有什麼區別? – 2017-07-07 16:13:39