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.

ggplot2: dos marcas de ejes x (año y mes) y etiquetas en dos líneas

Tengo este comando de gráfica:

pdx_1990s_plot <- ggplot(pdx_disc_1990s, aes(year+(mon/12), vol)) +
    geom_bar(stat='identity', color='blue', fill='#0387fc', position='dodge') +
    theme_classic() +
    theme(plot.title = element_text(hjust = 0.5, face = 'bold')) +
    theme(plot.subtitle = element_text(hjust = 0.5, face = 'bold')) +
    ggtitle('Promedio Mensual de Descarga en Portland', subtitle = '1988--1994') +
    xlab('Año') +
    ylab('Descarga (Pies Cúbicos/Segundo)')

que produce una gráfica con los tics del eje x y sus etiquetas para cada año.

No he encontrado cómo tener un tic pequeño para cada mes y un tic grande para cada año con los nombres de los meses en una línea de etiquetas y las etiquetas de los años en una segunda línea debajo.

Por favor, indíqueme una fuente de cómo hacer esto, con un ejemplo que pueda emular.

Gracias de antemano,

Rich

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hola Rich,

    Para agregar un eje secundario con tics más pequeños para cada mes y tics más grandes para cada año, con los nombres de los meses y las etiquetas de los años en líneas separadas, puedes usar la función sec_axis() en ggplot2. Aquí tienes un ejemplo de cómo agregar este eje secundario a tu gráfico:

    “`{r}

    Crea un data frame con etiquetas de año y mes para el eje secundario

    sec_axis_df <- data.frame(año = rep(1988:1994, each = 12),
    mes = rep(month.abb, times = 7))

    Modifica el comando del gráfico para incluir un segundo eje x

    pdx_1990s_plot <- ggplot(pdx_disc_1990s, aes(año + (mon / 12), vol)) +
    geom_bar(stat = ‘identity’, color = ‘blue’, fill = ‘#0387fc’, position = ‘dodge’) +
    theme_classic() +
    theme(plot.title = element_text(hjust = 0.5, face = ‘bold’),
    plot.subtitle = element_text(hjust = 0.5, face = ‘bold’),
    axis.text.x.bottom = element_blank()) + # Elimina las etiquetas del eje x
    ggtitle(‘Promedio mensual de descarga en Portland’, subtitle = ‘1988–1994’) +
    xlab(‘Año’) +
    ylab(‘Descarga (Pies cúbicos/segundo)’) +
    # Agrega el eje x secundario con etiquetas de mes y año
    scale_x_continuous(name = ‘Mes’,
    breaks = pdx_disc_1990s$año + (pdx_disc_1990s$mon / 12),
    labels = NULL,
    sec.axis = sec_axis(~ . – min(pdx_disc_1990s$año),
    breaks = pdx_1990s_plot$data$date,
    labels = paste(sec_axis_df$mes,
    “\n”,
    sec_axis_df$año,
    sep = ”),
    name = ‘Año’))

    “`

    En este comando modificado del gráfico, primero creamos un data frame sec_axis_df que especifica las etiquetas de año y mes para el eje secundario. Luego, usamos la función scale_x_continuous() para crear el eje x secundario con el argumento sec.axis. Dentro de sec.axis, restamos el valor mínimo de año de los valores del eje x para desplazar el rango del eje para que comience en el año cero. Luego, especificamos los puntos para el eje secundario como un vector de todos los valores del eje x (año + fracción de mes), y usamos la función paste() para combinar las etiquetas de mes y año en una sola etiqueta con un salto de línea en medio. Finalmente, especificamos el nombre para el eje secundario.

    ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.

    Saludos,
    [Tu nombre]

Comments are closed.