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:
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.