如何将列表传递给ggplot2?

11

我正在尝试使用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 实现完全相同的效果?我认为数据框或矩阵不是一个选项,因为向量长度不同。

谢谢

1个回答

11
答案是您不需要这样做。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()

在此输入图片描述

正如评论中所指出的,melt函数可以实现与这种手动重塑相同的结果,而且更加简单。我想我喜欢把事情搞复杂。


哈哈哈哈,谢谢,我也想到过这样的方法,但是我没能实现。事实上,你的想法让我测试了一下melt函数是否适用于我的情况,结果它完美地解决了问题!所以,如果我们正在寻求简单的解决方案,那么使用melt就可以了。 - Halian Vilela
@gsk3 是的,我已经使用了 melt 来处理所有其他的图形,但不知怎么地,我没有想到在这个上面使用它... - Halian Vilela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接