torta - varias graficas en r ggplot
Cómo pedir barras en el gráfico de barras facetadas ggplot2 (2)
Si quiero ordenar las barras en un gráfico de barras ggplot2 de mayor a menor, entonces normalmente actualizaría los niveles de factor de la categoría de barra, como ese
one_group <- data.frame(
height = runif(5),
category = gl(5, 1)
)
o <- order(one_group$height, decreasing = TRUE)
one_group$category <- factor(one_group$category, levels = one_group$category[o])
p_one_group <- ggplot(one_group, aes(category, height)) +
geom_bar(stat = "identity")
p_one_group
Si tengo varios grupos de diagramas de barras que quisiera en diferentes facetas, con cada faceta con barras ordenadas de mayor a menor (y diferentes ejes x), entonces la técnica se descompone.
Dado algunos datos de muestra
two_groups <- data.frame(
height = runif(10),
category = gl(5, 2),
group = gl(2, 1, 10, labels = letters[1:2])
)
y el código de trazado
p_two_groups <- ggplot(two_groups, aes(category, height)) +
geom_bar(stat = "identity") +
facet_grid(. ~ group, scales = "free_x")
p_two_groups
¿Qué debo hacer para ordenar el bar?
Si ayuda, un problema equivalente a resolver es: ¿cómo actualizo los niveles de los factores después de que he hecho la facetación?
Aquí hay un truco para lograr lo que quieres. No pude averiguar cómo obtener los valores de categoría debajo de las marcas de graduación. Entonces, si alguien puede ayudar a solucionar eso, sería maravilloso. Hazme saber si esto funciona
# add a height rank variable to the data frame
two_groups = ddply(two_groups, .(group), transform, hrank = rank(height));
# plot the graph
p_two_groups <- ggplot(two_groups, aes(-hrank, height)) +
geom_bar(stat = "identity") +
facet_grid(. ~ group, scales = "free_x") +
opts(axis.text.x = theme_blank()) +
geom_text(aes(y = 0, label = category, vjust = 1.5))
aquí hay un truco:
two_groups <- transform(two_groups, category2 = factor(paste(group, category)))
two_groups <- transform(two_groups, category2 = reorder(category2, rank(height)))
ggplot(two_groups, aes(category2, height)) +
geom_bar(stat = "identity") +
facet_grid(. ~ group, scales = "free_x") +
scale_x_discrete(labels=two_groups$category, breaks=two_groups$category2)
- hacer variable de factor ÚNICA para todas las entradas (categoría2)
- reordenar la variable en función de la altura
- trazar en la variable: aes (x = category2)
- reetiquetar el eje usando el valor original (categoría) para la variable (categoría2) en scale_x_discrete.