Como centralizar as etiquetas empilhadas de porcentagem de gráfico de barras
Eu estou tentando traçar bomstacked percent barchart
usandoggplot2
. Eu li alguns materiais e quase consigo traçar o que eu quero. Além disso, anexo o material, ele pode ser útil em um só lugar:
Como rotulo um gráfico de barras empilhadas no ggplot2 sem criar um quadro de dados resumido?
Crie um gráfico de barras empilhado onde cada pilha é dimensionada para somar 100%
Meu problema é que não posso colocarlabels
onde eu quero - no meio dos bares.
Você pode ver o problema na figura acima - os rótulos parecem horríveis e também se sobrepõem.
O que estou procurando agora é:
Como colocar etiquetas no meio das barras (áreas)
Como plotar não todos os rótulos, mas, por exemplo, maiores que 10%?
Como resolver o problema de sobreposição?
Para oQ 1.
@MikeWise sugerido possívelsolução. No entanto, ainda não consigo lidar com esse problema.
Além disso, anexo um exemplo reproduzível de como plotei esse 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("")