lineas - superponer graficas en r ggplot
¿Cómo agregar etiquetas de porcentaje o conteo sobre el gráfico de barras de porcentaje? (3)
Usando
ggplot2 1.0.0
, seguí las instrucciones en la publicación a continuación para descubrir cómo trazar gráficas de barras de porcentaje a través de factores:
Suma de porcentajes para cada faceta: respete el "relleno"
test <- data.frame(
test1 = sample(letters[1:2], 100, replace = TRUE),
test2 = sample(letters[3:8], 100, replace = TRUE)
)
library(ggplot2)
library(scales)
ggplot(test, aes(x= test2, group = test1)) +
geom_bar(aes(y = ..density.., fill = factor(..x..))) +
facet_grid(~test1) +
scale_y_continuous(labels=percent)
Sin embargo, parece que no puedo obtener una etiqueta para el recuento total o el porcentaje sobre cada una de las gráficas de barras cuando uso
geom_text
.
¿Cuál es la adición correcta al código anterior que también conserva el porcentaje del eje y?
Esto es más fácil de hacer si resume previamente sus datos. Por ejemplo:
library(ggplot2)
library(scales)
library(dplyr)
set.seed(25)
test <- data.frame(
test1 = sample(letters[1:2], 100, replace = TRUE),
test2 = sample(letters[3:8], 100, replace = TRUE)
)
# Summarize to get counts and percentages
test.pct = test %>% group_by(test1, test2) %>%
summarise(count=n()) %>%
mutate(pct=count/sum(count))
ggplot(test.pct, aes(x=test2, y=pct, colour=test2, fill=test2)) +
geom_bar(stat="identity") +
facet_grid(. ~ test1) +
scale_y_continuous(labels=percent, limits=c(0,0.27)) +
geom_text(data=test.pct, aes(label=paste0(round(pct*100,1),"%"),
y=pct+0.012), size=4)
(Para su información, también puede poner las etiquetas dentro de la barra, por ejemplo, cambiando la última línea de código a esto:
y=pct*0.5), size=4, colour="white")
)
He usado todo tu código y se me ocurrió esto. Primero asigne su ggplot a una variable, es decir, p <- ggplot (...) + geom_bar (...) etc. Luego puede hacer esto. No necesita resumir mucho, ya que ggplot tiene una función de compilación que ya le brinda todo esto. Te lo dejo para el formateo y tal. Buena suerte.
dat <- ggplot_build(p)$data %>% ldply() %>% select(group,density) %>%
do(data.frame(xval = rep(1:6, times = 2),test1 = mapvalues(.$group, from = c(1,2), to = c("a","b")), density = .$density))
p + geom_text(data=dat, aes(x = xval, y = (density + .02), label = percent(density)), colour="black", size = 3)
Manteniéndose dentro de ggplot, puede intentar
ggplot(test, aes(x= test2, group=test1)) +
geom_bar(aes(y = ..density.., fill = factor(..x..))) +
geom_text(aes( label = format(100*..density.., digits=2, drop0trailing=TRUE),
y= ..density.. ), stat= "bin", vjust = -.5) +
facet_grid(~test1) +
scale_y_continuous(labels=percent)
Para conteos, cambie ... densidad ... a ... conteo ... en geom_bar y geom_text
ACTUALIZACIÓN para ggplot 2.x
ggplot2 2.0
realizó muchos cambios en
ggplot
incluido uno que rompió la versión original de este código cuando cambió la función
stat
predeterminada utilizada por
geom_bar
ggplot 2.0.0
.
En lugar de llamar a
stat_bin
, como antes, para
stat_bin
los datos, ahora llama a
stat_count
para contar las observaciones en cada ubicación.
stat_count
devuelve
prop
como la proporción de los recuentos en esa ubicación en lugar de la
density
.
El siguiente código ha sido modificado para funcionar con esta nueva versión de
ggplot2
.
He incluido dos versiones, las cuales muestran la altura de las barras como un porcentaje de conteos.
El primero muestra la proporción del recuento sobre la barra como un porcentaje, mientras que el segundo muestra el recuento sobre la barra.
También agregué etiquetas para el eje y la leyenda.
library(ggplot2)
library(scales)
#
# Displays bar heights as percents with percentages above bars
#
ggplot(test, aes(x= test2, group=test1)) +
geom_bar(aes(y = ..prop.., fill = factor(..x..)), stat="count") +
geom_text(aes( label = scales::percent(..prop..),
y= ..prop.. ), stat= "count", vjust = -.5) +
labs(y = "Percent", fill="test2") +
facet_grid(~test1) +
scale_y_continuous(labels=percent)
#
# Displays bar heights as percents with counts above bars
#
ggplot(test, aes(x= test2, group=test1)) +
geom_bar(aes(y = ..prop.., fill = factor(..x..)), stat="count") +
geom_text(aes(label = ..count.., y= ..prop..), stat= "count", vjust = -.5) +
labs(y = "Percent", fill="test2") +
facet_grid(~test1) +
scale_y_continuous(labels=percent)
La trama de la primera versión se muestra a continuación.