我有一个由 10 列和 50 行组成的 data.frame。我使用 apply 函数逐列计算密度函数。现在我想绘制我一次计算的密度。
换句话说,而不是绘图...
plot(den[[1]])
plot(den[[2]]
plot(den[[3]]
...我想一次绘制所有的密度。
我想我必须使用该lapply
函数,并且可能我必须编写一个特定的函数来执行此操作。谁能帮我?
我有一个由 10 列和 50 行组成的 data.frame。我使用 apply 函数逐列计算密度函数。现在我想绘制我一次计算的密度。
换句话说,而不是绘图...
plot(den[[1]])
plot(den[[2]]
plot(den[[3]]
...我想一次绘制所有的密度。
我想我必须使用该lapply
函数,并且可能我必须编写一个特定的函数来执行此操作。谁能帮我?
也许这会有所帮助
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))
这使...
给出一些名字:
par(mfrow=c(2,2))
for(i in 1:length(den)){
plot(den[[i]],
main=paste('density ', i))
}
par(mfrow=c(1,1))
如果您只是不希望一个输出中的所有图,您可能想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)
我认为该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)
结果是:
和
latticeExtra
有很方便的功能,marginalplot
marginal.plot(DF,layout=c(2,2))