如何将来自数据框列表的多个箱线图组合在一起?

3
这是从Stack Exchange的统计部分转载的文章。我在那里提出了问题,被建议在这里提问。所以现在就来问吧。
我有一系列数据框架,每个数据框架具有类似的结构。每个数据框架中只有一个数字列。由于我的数据要求,每个数据框架的长度必须不同。我想创建一个箱线图,将数值按另一列中的属性分类,但箱线图应包含所有数据框架的信息。
希望这是一个清晰的问题。我很快会发布示例数据。
3个回答

8

Sam,

我假设这是对这个问题的追踪?也许你的样本数据会更好地说明你的需求细节(另一列中的“归类属性”部分),但是相同的melting方法应该适用于这里。

library(ggplot2)
library(reshape2)
#Fake data
a <- data.frame(a = rnorm(10))
b <- data.frame(b = rnorm(100))
c <- data.frame(c = rnorm(1000))

#In a list
myList <- list(a,b,c)


#In a melting pot
df <- melt(myList)

#Separate boxplots for each data.frame
qplot(factor(variable), value, data = df, geom = "boxplot")
#All values plotted together as one boxplot
qplot(factor(1), value, data = df, geom = "boxplot")

1
你能不能把这个列表合并起来? - hadley
1
@hadley - 当然可以。我以前没有特别使用过melt和列表,所以谢谢你的提示。我会相应地进行修改。 - Chase
确实是的,这是那个问题的后续。感谢您的编辑。 - Sam
请注意,为使此功能正常工作,您还需要添加“library(reshape)”。 - Diomidis Spinellis
@DiomidisSpinellis - 谢谢,已添加。回到2011年这个问题被回答时,当你加载ggplot2时,默认情况下会加载reshape...但现在不再是这样了,所以我更新了代码。 - Chase

1
a<-data.frame(c(1,2),c("x","y"))
b<-data.frame(c(3,4,5),c("a","b","c"))
boxplot(c(a[1],b[1]))

使用“1”选择我想要从数据框中获取的列。

数据框不能具有不同的列长度(每列必须具有相同数量的行),但您可以告诉箱线图在并行绘制多个数据集。


如果直接从列表中绘制图表,这个解决方案将无法工作。 - USER_1

0
使用melt()函数和基础R箱线图:
#Fake data
a <- data.frame(a = rnorm(10))
b <- data.frame(b = rnorm(100))
c <- data.frame(c = rnorm(100) + 5)

#In a list
myList <- list(a,b,c)

#In a melting pot
df <- melt(myList)

# plot using base R boxplot function
boxplot(value ~ variable, data = df)

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