2011-12-08 100 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