2012-07-05 40 views
7

Tôi muốn vẽ biểu đồ ô dạng RIÊNG cho mỗi cột không liên quan trong một khung dữ liệu. Tôi nghĩ rằng tôi đã đi đúng hướng với boxplot.matrix từ gói sfsmsic, nhưng có vẻ như làm tương tự như boxplot(as.matrix(plotdata) là để vẽ tất cả mọi thứ trong một hộp chia sẻ với thang chia sẻ trên trục. Tôi muốn (nói) 5 ô riêng lẻ.R: Lô ô nhiều ô bằng cách sử dụng các cột từ khung dữ liệu

tôi có thể làm điều này bằng tay như:

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

Nhưng có phải là một cách để sử dụng các cột khung dữ liệu?

EDIT: Tôi đã sử dụng lặp lại, xem câu trả lời của tôi.

Trả lời

2

tôi đã sử dụng lặp đi lặp lại để làm điều này. Tôi nghĩ có lẽ tôi không rõ ràng trong câu hỏi ban đầu. Cảm ơn các câu trả lời không kém.

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

} 
7

Từ ?boxplot chúng ta thấy rằng chúng tôi có quyền lựa chọn để vượt qua nhiều vectơ dữ liệu như các yếu tố của một danh sách, và chúng tôi sẽ nhận được nhiều boxplots, một cho mỗi vector trong danh sách của chúng tôi.

Vì vậy, tất cả chúng ta cần phải làm là chuyển đổi các cột của ma trận của chúng tôi vào một danh sách:

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

Nếu bạn thực sự muốn tấm riêng biệt mỗi một boxplot duy nhất (mặc dù, thẳng thắn, tôi không hiểu tại sao bạn sẽ muốn làm điều đó), tôi thay vào đó sẽ chuyển sang ggplot và faceting:

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

-1 để lừa dối bằng cách đọc tài liệu! ;-) –

+0

Việc sử dụng này vẫn trả về một ô có nhiều x danh mục. Tôi đang cố gắng để làm cho lô riêng biệt cho từng loại x tìm thấy trong một ma trận. 'par (mfrow = c (2,5)) ô mẫu (x = as.list (as.data.frame (plotdata)))' là mã tôi đã sử dụng, trong đó plotdata là ma trận đôi ... x9 . – gisol

+0

@gisol Xem chỉnh sửa của tôi. – joran

10

bạn có thể sử dụng gói reshape để đơn giản hóa mọi thứ

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) 

hoặc thậm chí sau đó sử dụng ggplot2 gói để làm cho mọi việc đẹp hơn

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

sự khác nhau giữa 'melt' và' stack' là gì? –

Các vấn đề liên quan