Fus*_*cho 2 for-loop r ggplot2
我在更新ggplot对象时遇到一些问题。我想做的是在每个循环中更改的特定位置放置一条垂直线,因此:多条线将显示在不同的位置。但是,当我使用for循环时,它仅显示创建的最后一行,但是当我手动执行时,它可以工作。我创建了一个可复制的示例,你们可以检查以下示例:
library(ggplot2)
x <- ggplot(mapping = aes(x = 1:100, y = 1:100)) +
geom_line()
for(i in 1:6){
x <- x + geom_vline(aes(xintercept = i*5))
}
y <- ggplot(mapping = aes(x = 1:100, y = 1:100)) +
geom_line()
y <- y + geom_vline(aes(xintercept = 5))
y <- y + geom_vline(aes(xintercept = 10))
y <- y + geom_vline(aes(xintercept = 15))
y <- y + geom_vline(aes(xintercept = 20))
y <- y + geom_vline(aes(xintercept = 25))
y <- y + geom_vline(aes(xintercept = 30))
Run Code Online (Sandbox Code Playgroud)
检查两个图。为什么对我来说两个过程都做“相同”的事情,但第一个情节与第二个情节看起来却不一样?
我正在查看一些人留下的贡献,并且有一个人可以非常有效地解决它,而是使用aes_()而不是aes()。区别在于aes_()强制评估和更新绘图,而aes()仅在绘制绘图时评估索引。因此:它永远不会在for循环内更新。
library(ggplot2)
x <- ggplot(mapping = aes(x = 1:100, y = 1:100)) +
geom_line()
for(i in 1:6){
x <- x + geom_vline(aes_(xintercept = i*5))
}
Run Code Online (Sandbox Code Playgroud)