1

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

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)

在此处输入图像描述

4

2 回答 2

2

您需要告诉ggplot将表达式评估aes()为外部变量。

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)

在此处输入图像描述

于 2021-12-02T14:15:55.377 回答
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

在此处输入图像描述

于 2021-12-02T14:14:43.430 回答