【问题标题】:ggplot only shows one entry when run in a for loopggplot 在 for 循环中运行时仅显示一个条目
【发布时间】:2022-01-09 00:40:50
【问题描述】:

我想在层中建立一个图,其中每一层都在前一层之前。在下面的简化示例中,它似乎只产生了一层,我不明白为什么。

arcs <- data.frame(
  radius = seq(from = 10, to = 100, by = 10)
)

g <- ggplot(arcs)
for(yc in 1:3) {
  for(xc in 1:3) {
    g <- g + ggforce::geom_arc_bar(aes(x0 = xc * 10, y0 = yc * 10, 
                                       r0 = radius - 2, r = radius, start = 0, end = 2 * pi),
                                   fill = 'blue', alpha = 0.1, colour = NA)
  }
}
g <- g + 
  coord_equal()
print(g)

【问题讨论】:

    标签: r ggplot2 ggforce


    【解决方案1】:

    你在寻找这样的东西吗?

    arcs <- data.frame(
      radius = seq(from = 10, to = 100, by = 10)
    )
    
    g <- ggplot(arcs, aes(x0 = x, y0 = y))
    
    for(yc in 1:3) {
      for(xc in 1:3) {
        g <- g + ggforce::geom_arc_bar(
          data = data.frame(radius = arcs$radius, x = xc * 10, y = yc * 10),
                 aes(r0 = radius - 2, r = radius, start = 0, end = 2 * pi),
                 fill = 'blue', alpha = 0.1, colour = NA)
      }
    }
    g <- g + coord_equal()
    
    g
    

    【讨论】:

      【解决方案2】:

      您需要告诉ggplotaes() 中的表达式计算为外部变量。

      g <- ggplot(arcs)
      
      for(yc in 1:3) { 
        y0 <- yc * 10
        for(xc in 1:3) {
          x0 <- xc * 10
          g <- g + ggforce::geom_arc_bar(aes(x0 = {{x0}}, y0 = {{y0}}, 
                                             r0 = radius - 2, r = radius, start = 0, end = 2 * pi),
                                         fill = 'blue', alpha = 0.1, colour = NA)
        }
      }
      g <- g + 
        coord_equal()
      print(g)
      

      【讨论】:

      • 感谢@caldwellst,做到了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多