es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ggplot solo muestra una entrada cuando se ejecuta en un bucle for.

Me gustaría construir un gráfico en capas donde cada capa esté delante de la capa anterior. En el ejemplo simplificado que se muestra a continuación, parece que solo produce una capa y no puedo ver por qué.

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)

entrar descripción de la imagen aquí

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la que parece producir sólo una capa es porque todos los arcos se representan en el mismo color y con la misma transparencia. Si cambias el color de relleno o la transparencia para cada arco, podrás ver todas las capas.

    Una forma de hacer esto es crear un vector de colores o transparencias y utilizarlo en los argumentos fill o alpha de ggforce::geom_arc_bar(). Por ejemplo:

    arcs <- data.frame(
      radius = seq(from = 10, to = 100, by = 10)
    )
    
    colors <- c("red", "green", "blue")
    alphas <- c(0.4, 0.2, 0.1)
    
    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 = colors[yc], alpha = alphas[xc], colour = NA)
      }
    }
    
    g <- g + coord_equal()
    print(g)
    

    Esto producirá un gráfico con tres capas que tienen diferentes colores y transparencias. Puedes ajustar los colores y transparencias según desees.

Comments are closed.