我的问题与此问题完全重复[1],但提供的答案并非在我的系统上运行。
问题:如何在for循环中添加geom_segment()图层?如果我使用aes,作为引用问题的OP,我也只得到最后一层。如果,正如回答者所说,我不会使用aes,我根本不会得到任何细分。
这是一个最小的例子:
ga <- 2.39996322972865332
p <- ggplot()
p <- p + scale_y_continuous(limits = c(-1, 1))
p <- p + scale_x_continuous(limits = c(-1, 1))
for (i in 0:2) {
# p <- p + geom_segment(x = -cos(i*ga), y = -sin(i*ga), xend = cos(i*ga), yend = sin(i*ga)) # No segments
p <- p + geom_segment(aes(x = -cos(i*ga), y = -sin(i*ga), xend = cos(i*ga), yend = sin(i*ga))) # Only last segment
}
p
我在Ubuntu上使用R版本3.1.2和(显然)ggplot2版本1.0.0。
(注意:如果我使用repeat
或while
,我会得到相同的结果。)
[1] Enriching a ggplot2 plot with multiple geom_segment in a loop?
答案 0 :(得分:4)
跳过循环。将向量传递给i变量:
p <- p + geom_segment(
aes(x = -cos((0:2)*ga), y = -sin((0:2)*ga),
xend = cos((0:2)*ga), yend = sin((0:2)*ga))
)
只是检查一下可以使用变量和数字常量:
i <- 0:2
p <- p + geom_segment(aes(x = -cos(i*ga), y = -sin(i*ga),
xend = cos(i*ga), yend = sin(i*ga)) )
答案 1 :(得分:0)
我有一个非常类似的问题,但无法避免使用for循环。
解决了这个问题 adding inherit.aes = TRUE
aes()
语句中的geom_segment()
语句之后。
答案 2 :(得分:-1)
我只想在@BondedDust的回答中添加一点。
如果你试图把它放到一个函数中,就像这样......
draw.golden.angle <- function(n) {
ga <- 2.39996322972865332
p <- ggplot()
p <- p + scale_y_continuous(limits = c(-1, 1))
p <- p + scale_x_continuous(limits = c(-1, 1))
i <- 0:n
p <- p + geom_segment(aes(x = -cos(i*ga), y = -sin(i*ga), xend = cos(i*ga), yend = sin(i*ga))) # Only last segment
p
}
draw.golden.angle(7)
...您将收到错误消息,指出变量i
未被识别。您可以通过将i
分配给全局变量来解决此问题,如下所示:
i <<- 0:n