绘制一个密度列表的图表

5
我有一个由10列和50行组成的数据框。我使用apply函数逐列计算密度函数。现在,我想要一次性地绘制我计算出的所有密度图。
换句话说,我不想每次只绘制一列...
plot(den[[1]]) 
plot(den[[2]]
plot(den[[3]]

我希望能够一次性绘制所有的密度图。
我想必须使用lapply函数,可能需要编写一个特定的函数来完成此操作。有人能帮助我吗?
3个回答

7
也许这会有所帮助。
set.seed(001)
DF <- data.frame(matrix(rnorm(400, 100, 12), ncol=4)) # some data
den<-apply(DF, 2, density) # estimating density


par(mfrow=c(2,2))
sapply(den, plot) # plot each density
par(mfrow=c(1,1))

以下是一些名称:

enter image description here

其中提供了:

par(mfrow=c(2,2))
for(i in 1:length(den)){
  plot(den[[i]], 
       main=paste('density ', i))
}
par(mfrow=c(1,1))

enter image description here

如果您不想在一个输出中显示所有绘图,可以将par(mfrow=c(2,2))删除,然后只运行sapply(den, plot)

编辑:针对您在评论中的第二个问题的答案

plot(den[[1]], ylim=c(0,.04), 
     main='Densities altogether') # plot the first density
for(i in 2:length(den)){          # Add the lines to the existing plot
  lines(den[[i]], col=i)          
}

输入图像描述

以下是使用legend函数添加图例的实用方法:

legend('topright', paste('density ', 1:4), col=1:4, lty=1, cex=.65)

2
或者你可以使用 plyr 中的 l_ply(),它旨在不返回输出。 - Sacha Epskamp
@Bfu38。很高兴能够有所帮助:D - Jilber Urbina
是的,Jiber,非常有用!还有一个简短的问题...如果我想在同一张图上绘制所有密度曲线怎么办? - Bfu38

1

我认为 lattice 包可能会很方便:

以下是 Jilber 的示例:

set.seed(001)
DF <- data.frame(matrix(rnorm(400, 100, 12), ncol=4)) # some data
DF <- stack(DF) # to long form

library(lattice)
densityplot(~values|ind, DF, as.table=TRUE)
# or
densityplot(~values, groups=ind, DF)

结果如下:

Separate densities

并且

Combined densities


1

latticeExtra有一个非常方便的函数,marginalplot

marginal.plot(DF,layout=c(2,2))

enter image description here


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