varias superponer studio lineas histogramas graficos graficas r ggplot2 bar-chart labels

studio - superponer graficas en r



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

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 barra de un color dado deberían combinarse. El siguiente código usa dplyr lugar de plyr para configurar los datos para el trazado:

library(dplyr) # Initial data frame df <- data.frame(Category, Brand, USD) # 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)

Para trazar los datos, use una declaración ifelse para determinar si una etiqueta se traza 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="")

ACTUALIZACIÓN: Con ggplot2 versión 2, ya no es necesario calcular las coordenadas de las etiquetas de texto para centrarlas. En su lugar, puede usar 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="")

Estoy tratando de trazar un buen gráfico de stacked percent barchart usando ggplot2 . He leído algo de material y casi logro trazar lo que quiero. Además, adjunto el material, podría ser útil en un solo lugar:

¿Cómo etiqueto un gráfico de barras apiladas en ggplot2 sin crear un marco de datos de resumen?

Cree un diagrama de barras apilado donde cada pila se escala para sumar al 100%

R gráfico de barras de porcentaje apiladas con porcentaje de factor binario y etiquetas (con ggplot)

Mi problema es que no puedo colocar labels donde quiero, en el medio de las barras.

Puede ver el problema en la imagen de arriba: las etiquetas se ven horribles y también se superponen entre sí.

Lo que estoy buscando ahora es:

  1. Cómo colocar etiquetas en el medio de las barras (áreas)

  2. ¿Cómo trazar no todas las etiquetas, pero, por ejemplo, cuáles son superiores al 10%?

  3. ¿Cómo resolver el problema de superposición?

Para la Q 1. @MikeWise sugirió una posible solution . Sin embargo, todavía no puedo lidiar con este problema.

Además, adjunto ejemplo reproducible, cómo he trazado este grahp.

library(''plyr'') library(''ggplot2'') library(''scales'') set.seed(1992) n=68 Category <- sample(c("Black", "Red", "Blue", "Cyna", "Purple"), n, replace = TRUE, prob = NULL) Brand <- sample("Brand", n, replace = TRUE, prob = NULL) Brand <- paste0(Brand, sample(1:5, n, replace = TRUE, prob = NULL)) USD <- abs(rnorm(n))*100 df <- data.frame(Category, Brand, USD) # Calculate the percentages df = ddply(df, .(Brand), transform, percent = USD/sum(USD) * 100) # Format the labels and calculate their positions df = ddply(df, .(Brand), transform, pos = (cumsum(USD) - 0.5 * USD)) #create nice labes df$label = paste0(sprintf("%.0f", df$percent), "%") ggplot(df, aes(x=reorder(Brand,USD, function(x)+sum(x)), y=percent, fill=Category))+ geom_bar(position = "fill", stat=''identity'', width = .7)+ geom_text(aes(label=label, ymax=100, ymin=0), vjust=0, hjust=0,color = "white", position=position_fill())+ coord_flip()+ scale_y_continuous(labels = percent_format())+ ylab("")+ xlab("")


Seguí el ejemplo y encontré la forma de poner buenas etiquetas para un simple gráfico de barras apiladas. Creo que también podría ser útil.

df <- data.frame(Category, Brand, USD) # 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( pos = cumsum(USD)-0.5*USD) ggplot(df.summary, aes(x=reorder(Brand,USD,function(x)+sum(x)), y=USD, fill=Category)) + geom_bar(stat=''identity'', width = .7, colour="black", lwd=0.1) + geom_text(aes(label=ifelse(USD>100,round(USD,0),""), y=pos), colour="white") + coord_flip()+ labs(y="", x="")