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.

¿Hay algún método para establecer las marcas del eje theta para un gráfico circular de anillo en ggplot2?

Quiero mostrar una marca de verificación para el eje theta en el gráfico polar de ggplot2. Sin embargo, tanto axis.ticks.y como axis.ticks.y en el tema() no funcionan para el eje theta. Cualquier ayuda sería apreciada, gracias.

library(ggplot2)
df <- data.frame(
    start = c(0, 121, 241),
    end = c(120, 240, 359),
    group = letters[1:3]
)

Un ejemplo de gráfico circular de anillo

base <- ggplot(df, aes(ymax = end, ymin = start, 
                       xmin = 0.8, xmax = 1, 
                       fill = group)) +
    geom_rect() +
    coord_polar(theta = "y") +
    xlim(c(0, 1))
base
# El tick del eje y se puede cambiar
base + theme(axis.ticks.y = element_blank(), axis.text.y = element_blank())
# Establecer el tick del eje x no funcionó para el eje theta
base + theme(axis.ticks.x = element_line(color = "black", size = 2))

Gracias a @Vishal A., la respuesta de https://stackoverflow.com/questions/33549739/controlling-ticks-and-odd-text-in-a-pie-chart-generated-from-a-factor-variable-i/33551864#33551864 utiliza panel.grid.major.y. Sin embargo, esto agregará las cuadrículas principales en lugar de los ticks como se muestra a continuación:

base + theme(panel.grid.major.y = element_line(colour = "black"))

[Imagen]

*Creado el 2021-12-20 por el paquete reprex (v2.0.1)*

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar marcas de verificación al eje de theta en una gráfica polar de ggplot2, podemos usar el parámetro axis.ticks.length en la función theme() para controlar la longitud de las marcas y hacer que sean cero, ocultándolas efectivamente, y luego agregar nuevas marcas de verificación manualmente utilizando la función geom_segment(). Aquí está el código modificado:

    library(ggplot2)
    df <- data.frame(
      start = c(0, 121, 241),
      end = c(120, 240, 359),
      group = letters[1:3]
    )
    
    base <- ggplot(df, aes(ymax = end, ymin = start, 
                           xmin = 0.8, xmax = 1, 
                           fill = group)) +
      geom_rect() +
      coord_polar(theta = "y") +
      xlim(c(0, 1)) +
      theme(axis.ticks.length = unit(0, "cm")) # ocultar las marcas predeterminadas
    
    # Agregar nuevas marcas de verificación manualmente usando geom_segment()
    ticks_theta <- data.frame(x = rep(0.8, nrow(df)),
                              y = (df$start + df$end) / 2, # posición de las marcas
                              group = df$group)
    base + 
      geom_rect() +
      geom_segment(data = ticks_theta, # agregar nuevas marcas de verificación
                   aes(x = x, y = y, xend = x + 0.05, yend = y),
                   size = 1, color = "black") +
      coord_polar(theta = "y") +
      xlim(c(0, 1)) +
      theme(axis.ticks.length = unit(0, "cm"), # ocultar las marcas predeterminadas
            axis.text.y = element_blank()) # ocultar las etiquetas predeterminadas
    

    Esto creará una gráfica polar con las marcas de verificación especificadas para el eje de theta:

    output

    Ajustando el parámetro yend en geom_segment(), podemos controlar la longitud de las marcas de verificación.

Comments are closed.