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%

Gráfico de barras percentuais empilhadas em R com porcentagem de fator binário e etiquetas (com ggplot)

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("")

questionAnswers(2)

yourAnswerToTheQuestion