在for循环中使用geom_segment()?

时间:2015-03-13 17:00:05

标签: r for-loop ggplot2

我的问题与此问题完全重复[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。

(注意:如果我使用repeatwhile,我会得到相同的结果。)

[1] Enriching a ggplot2 plot with multiple geom_segment in a loop?

3 个答案:

答案 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)) )

enter image description here

答案 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