这个循环创建了一个包含3个ggplots的列表,但因为x
和xend
的参数取决于循环的索引,所以沮丧如下:
DF <- data.frame(column1=c(1,2,3,4,5), column2=c(4,5,6,7,8))
list_of_ggplots <- list()
for (num in seq(1:3)){
p <- ggplot()
p <- p + geom_segment(data=DF, aes(x=column1[num], xend=column2[num], y=1, yend=1))
list_of_ggplots[[num]] <- p }
list_of_ggplots
我们得到3个图基本上是相同的图(因为在他们被调用的时间点,num
是3)。
制作这些地块的更好策略是什么?
答案 0 :(得分:0)
您可以使用lapply
list_of_ggplots <- lapply(1:nrow(DF), function(i) {ggplot(DF[i,]) + aes(x=column1, xend=column2, y=1, yend=1)+geom_segment()})
答案 1 :(得分:0)
您可以使用lapply
以类似“R”的方式制作列表,然后只使用DF
将num
与scale_x_continuous
进行对比,以便在美学方面做到这一点。但是,您还应该使用limits
并设置list_of_ggplots <- lapply(1:nrow(DF), function(num) {
p <- ggplot()
p <- p + geom_segment(data=DF[num,], aes(x=column1, xend=column2, y=1, yend=1))
p + scale_x_continuous(limits=c(0, max(DF$column2)))
})
,否则它们仍然“看起来”相同(除了x轴上的#)
{{1}}