2011-12-08 44 views
5

我想在ggplot2做一個值列表的boxplot,但問題是它不知道如何處理列表,我應該嘗試什麼?如何將列表傳遞給ggplot2?

如:

k <- list(c(1,2,3,4,5),c(1,2,3,4),c(1,3,6,8,14),c(1,3,7,8,10,37)) 
k 
[[1]] 
[1] 1 2 3 4 5 

[[2]] 
[1] 1 2 3 4 

[[3]] 
[1] 1 3 6 8 14 

[[4]] 
[1] 1 3 7 8 10 37 

如果我通過k作爲參數傳遞給boxplot()它將完美的處理,並交出了漂亮的(當然不是那麼好...呵呵呵)箱線圖與所有值的範圍Y軸和列表索引(每個元素)作爲X軸。

我應該如何實現與ggplot2完全相同的效果?我認爲數據幀或矩陣不是一種選擇,因爲矢量長度不同。

謝謝

回答

8

答案是,你沒有。 ggplot2被設計用於處理數據幀,特別是長形式的數據幀。這意味着你需要你的數據,一個高大的載體,具有聚合因子:

d <- data.frame(x = unlist(k), 
       grp = rep(letters[1:length(k)],times = sapply(k,length))) 
ggplot(d,aes(x = grp, y = x)) + geom_boxplot() 

enter image description here

正如在評論中指出,melt達到相同的結果,本手冊整形和簡單得多。我想我喜歡讓事情變得困難。

+0

哈哈哈哈..謝謝,我曾經想過這樣的事情,但我無法實現它。 事實上,你的想法讓我測試一下,如果函數'melt'會爲我做,它就像一個魅力! 所以解決方案,如果我們正在尋找簡單性,而且確實是我們使用'melt'。 – Lianzinho

+0

@Lianzinho嗯......我想知道是誰寫了'熔化'嗎? :-) –

+0

@ gsk3是的,我已經使用'熔化'來完成所有其他圖形,但不知何故,我沒有考慮將它用於這個... – Lianzinho