我正在编写一个 R 代码,它允许用户从数据中选择列并为每个列绘制直方图。因此,我使用 'for' 循环使用 ggplot2 库生成所需数量的图,并将它们保存在一个列表中。但我面临的问题是,在“for”循环的每次迭代中,列表中的所有对象都存储相同的图。因此,最终输出由直方图网格组成,标记不同但描绘相同(最后)列。
我知道这个问题已经很老了,我发现在 for 循环中重命名 ggplot2 图形的答案和https://stat.ethz.ch/pipermail/r-help/2008-February/154438.html是一个有用的开始观点。
我使用 R 中可用的标准瑞士生育力数据集来生成图。这是代码: -
data_ <- swiss
data_ <- na.omit(data_)
u <- c(2, 3, 4, 5, 6)
plotData <- data_[,u]
bw <- 5
plotType <- 'probability'
library(ggplot2)
library(gridExtra)
histogramList <- vector('list', length(u))
if(plotType=='probability')
{
for(i in 1:length(u))
{
indexDataFrame <- data.frame(plotData[,i])
probabilityHistogram <- ggplot(indexDataFrame, aes(x=indexDataFrame[,1]))
histogramList[[i]] <- probabilityHistogram + geom_histogram(aes(y=..density..), binwidth=bw, colour='black', fill='skyblue') + geom_density() + scale_x_continuous(names(plotData)[i]) + opts(legend.position='none')
}
} else
if(plotType=='frequency')
{
for(i in 1:length(u))
{
indexDataFrame <- data.frame(plotData[,i])
probabilityHistogram <- ggplot(indexDataFrame, aes(x=indexDataFrame[,1]))
histogramList[[i]] <- probabilityHistogram + geom_histogram(aes(y=..count..), binwidth=bw, colour='black', fill='skyblue') + geom_density() + scale_x_continuous(names(plotData)[i]) + opts(legend.position='none')
}
}
arg_list <- c(histogramList, list(nrow=3, ncol=2))
#jpeg('histogram', width=1024, height=968)
do.call(grid.arrange, arg_list)
#graphics.off()
如果我错过了这个论坛中问题的明显答案,我深表歉意,如果您能指导我解决这个问题,我将不胜感激。我希望我的解释很清楚,如果没有,请让我知道所需的澄清。
谢谢!