Próbuję wykreślić ładne stacked percent barchart
przy użyciu ggplot2
. Czytałem trochę materiału i prawie udało mi się spiskować, czego chcę. Również Załączam materiału, może być przydatny w jednym miejscu:Jak wyśrodkować stos etykiet procentowych w postaci wykresu słupkowego
How do I label a stacked bar chart in ggplot2 without creating a summary data frame?
Create stacked barplot where each stack is scaled to sum to 100%
R stacked percentage bar plot with percentage of binary factor and labels (with ggplot)
Moim problemem jest to, że nie mogę umieścić labels
gdzie chcę - w środek barów.
Możesz zobaczyć problem na powyższym obrazku - etykiety wyglądają okropnie, a także nakładają się na siebie.
Co szukam teraz jest:
Jak umieszczać etykiety w midde barów (obszarów)
Jak wykreślić nie wszystkie etykiety, ale dla przykładu, który są lepsze niż 10%?
Jak rozwiązać problem nakładania się?
Dla Q 1.
@MikeWise sugeruje możliwą solution. Jednak nadal nie mogę poradzić sobie z tym problemem.
Ponadto załączam powtarzalny przykład, w jaki sposób wykreśliłem ten 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("")
addtional zapytania. Czy istnieje prosty sposób na drukowanie etykiet w pudełkach? Wydaje się, że funkcje 'geom_label' nie działają. [Ten link] (http://stackoverflow.com/questions/7660893/boxed-geom-text-with-ggplot2) też nie pomagają. Sposób wygląda naprawdę kompleksowo – AK47
Jakieś przemyślenia na temat tego, jak to osiągnąć dzięki nowej wersji? Ostatnia "Odpowiedź" na tej stronie pokazuje podobny problem, który mam, gdzie wygląda, jak etykiety są umieszczane w odwrotnej kolejności. Z powodzeniem używałem tej metody od miesięcy. –
Zobacz aktualizację mojej odpowiedzi. – eipi10