varios varias torta superponer los graficos grafico graficas ggplot escala ejes con como cambiar barras barplot avanzados r ggplot2 data-visualization bar-chart

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)

  1. hacer variable de factor ÚNICA para todas las entradas (categoría2)
  2. reordenar la variable en función de la altura
  3. trazar en la variable: aes (x = category2)
  4. reetiquetar el eje usando el valor original (categoría) para la variable (categoría2) en scale_x_discrete.