Saltar al contenido

Cómo centrar etiquetas de gráfico de barras de porcentaje apiladas

Esta cuestión se puede tratar de variadas maneras, pero te damos la respuesta más completa para nosotros.

Aquí se explica cómo centrar las etiquetas y evitar trazar etiquetas para porcentajes pequeños. Un problema adicional en sus datos es que tiene múltiples secciones de barra para cada color. En cambio, me parece que todas las secciones de la barra de un color determinado deberían combinarse. El siguiente código usa dplyr en vez de plyr para configurar los datos para el trazado:

library(dplyr)

# Initial data frame   
df <- data.frame(Category, Brand, USD)

# Calculate percentages
df.summary = df %>% group_by(Brand, Category) %>% 
  summarise(USD = sum(USD)) %>%   # Within each Brand, sum all values in each Category
  mutate(percent = USD/sum(USD))

Con ggplot2 versión 2, ya no es necesario calcular las coordenadas de las etiquetas de texto para centrarlas. En su lugar, puede utilizar position=position_stack(vjust=0.5). Por ejemplo:

ggplot(df.summary, aes(x=reorder(Brand, USD, sum), y=percent, fill=Category)) +
  geom_bar(stat="identity", width = .7, colour="black", lwd=0.1) +
  geom_text(aes(label=ifelse(percent >= 0.07, paste0(sprintf("%.0f", percent*100),"%"),"")),
                position=position_stack(vjust=0.5), colour="white") +
  coord_flip() +
  scale_y_continuous(labels = percent_format()) +
  labs(y="", x="")

ingrese la descripción de la imagen aquí


Con versiones anteriores, necesitamos calcular la posición. (Igual que arriba, pero con una línea adicional que define pos):

# Calculate percentages and label positions
df.summary = df %>% group_by(Brand, Category) %>% 
  summarise(USD = sum(USD)) %>%   # Within each Brand, sum all values in each Category
  mutate(percent = USD/sum(USD),
         pos = cumsum(percent) - 0.5*percent)

Luego grafica los datos usando un ifelse instrucción para determinar si una etiqueta está trazada o no. En este caso, he evitado trazar una etiqueta para porcentajes inferiores al 7%.

ggplot(df.summary, aes(x=reorder(Brand,USD,function(x)+sum(x)), y=percent, fill=Category)) +
  geom_bar(stat='identity',  width = .7, colour="black", lwd=0.1) +
  geom_text(aes(label=ifelse(percent >= 0.07, paste0(sprintf("%.0f", percent*100),"%"),""),
                y=pos), colour="white") +
  coord_flip() +
  scale_y_continuous(labels = percent_format()) +
  labs(y="", x="")

ingrese la descripción de la imagen aquí

Si haces scroll puedes encontrar los comentarios de otros usuarios, tú igualmente tienes la habilidad insertar el tuyo si te gusta.

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


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

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