【发布时间】:2020-12-03 16:45:13
【问题描述】:
我有一个数据框,我想使用 ggplot 绘制它的所有列,但最后一列与最后一列相对。此后,我使用 for 循环和 grid.arrange 来获得一行 13 个图。但是输出只是在整个行中重复一个图。 也就是说,只需根据第 14 列绘制第 13 列(最后一次迭代)。
times1<-times[timeindex] ### this is a vector
mat_ind <- matrix(0, nrow=120,ncol=13)
mat_ind [,1] <- logBF_Apollo_1[,1] ### all logBF_Apollo_1,..., logBF_Apollo_1 are matrices
mat_ind [,2] <- logBF_Apollo_2[,1]
mat_ind [,3] <- logBF_Apollo_3[,1]
mat_ind [,4] <- logBF_Apollo_4[,1]
mat_ind [,5] <- logBF_Apollo_5[,1]
mat_ind [,6] <- logBF_Apollo_6[,1]
mat_ind [,7] <- logBF_Apollo_7[,1]
mat_ind [,8] <- logBF_Apollo_8[,1]
mat_ind [,9] <- logBF_Apollo_9[,1]
mat_ind [,10] <- logBF_Apollo_10[,1]
mat_ind [,11] <- logBF_Apollo_11[,1]
mat_ind [,12] <- logBF_Apollo_12[,1]
mat_ind [,13] <- logBF_Apollo_13[,1]
mat_ind<- data.frame(mat_ind,times1)
library(ggplot2)
library(gridExtra)
for(i in 1:13 ){
p[[i]] <-ggplot(mat_ind, aes(x = times1, y = mat_ind[,i])) +
geom_line() +ylab("") +coord_flip() +
xlab("")}
figure1 <- grid.arrange(p[[1]],p[[2]],p[[3]],p[[4]],p[[5]],p[[6]],p[[7]],p[[8]],p[[9]],
p[[10]],p[[11]],p[[12]],p[[13]], ncol = 13, nrow =1)
figure
结果只是重复了 for 循环的最后一次迭代。 那就是问题是for循环的输出是:
p[[1]]=p[[2]]=...=p[[13]] ###这是个问题。
您能告诉我如何解决它吗?
【问题讨论】:
-
这几乎肯定是一个“
ggplot懒惰地评估”问题> 当for循环结束并且ggplot最终评估时,所有调用都使用索引变量的相同(最终)值.最简单的解决方案是将for循环转换为lapply或类似的。这将强制进行评估。