Saltar al contenido

Arreglando el orden de las facetas en ggplot

Contamos con el arreglo a esta incógnita, al menos eso deseamos. Si tienes alguna interrogante coméntalo, para nosotros será un placer ayudarte

Solución:

Haga que su tamaño sea un factor en su marco de datos al:

temp$size_f = factor(temp$size, levels=c('50%','100%','150%','200%'))

Luego cambia el facet_grid(.~size) a facet_grid(.~size_f)

Luego trama:
ingrese la descripción de la imagen aquí

Los gráficos están ahora en el orden correcto.

Aquí hay una solución que mantiene las cosas dentro de una cadena de tuberías dplyr. Ordena los datos por adelantado y luego usa mutate_at para convertirlos en un factor. Modifiqué ligeramente los datos para mostrar cómo se puede aplicar esta solución en general, dados los datos que se pueden ordenar con sensatez:

# the data
temp <- data.frame(type=rep(c("T", "F", "P"), 4),
                    size=rep(c("50%", "100%", "200%", "150%"), each=3), # cannot sort this
                    size_num = rep(c(.5, 1, 2, 1.5), each=3), # can sort this
                    amount=c(48.4, 48.1, 46.8, 
                             25.9, 26.0, 24.9,
                             20.8, 21.5, 16.5,
                             21.1, 21.4, 20.1))

temp %>% 
  arrange(size_num) %>% # sort
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>% # convert to factor

  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)

También puede aplicar esta solución para organizar las barras dentro de las facetas, aunque solo puede elegir un único orden preferido:

    temp %>% 
  arrange(size_num) %>%
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>%
  arrange(desc(amount)) %>%
  mutate_at(vars(type), funs(factor(., levels=unique(.)))) %>%
  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)


  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)

Hay un par de buenas soluciones aquí.

Similar a la respuesta de Harpal, pero dentro de la faceta, entonces no requiere ningún cambio en los datos subyacentes o manipulación previa al trazado:

# Change this code:
facet_grid(.~size) + 
# To this code:
facet_grid(~factor(size, levels=c('50%','100%','150%','200%')))

Esto es flexible y se puede implementar para cualquier variable a medida que cambia qué elemento se faceta, no se requiere un cambio subyacente en los datos.

Te mostramos las comentarios y valoraciones de los usuarios

Si te ha sido provechoso nuestro artículo, te agradeceríamos que lo compartas con más programadores de este modo contrubuyes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *