如何将列表传递给ggplot2?

时间:2011-12-08 00:46:52

标签: r ggplot2

我正在尝试在ggplot2上绘制一个值列表的盒子图,但问题是它不知道如何处理列表,我该怎么办?

E.g:

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(),它将完美地处理它并产生一个漂亮的(不太好的...... hehehe)箱图,其中所有值的范围都为Y -axis和列表索引(每个元素)作为X轴。

我应该如何使用ggplot2达到完全相同的效果?我认为数据帧或矩阵不是一种选择,因为向量的长度不同。

由于

1 个答案:

答案 0 :(得分:9)

答案是你没有。 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实现了与手动重塑相同的结果,并且更加简单。我想我想让事情变得困难。