Я пытаюсь построить красивый stacked percent barchart
с помощью ggplot2
. Я прочитал некоторые материалы и почти сумел заговорить, чего хочу. Кроме того, я прилагаю материал, он может быть полезен в одном месте:
Как пометить гистограмму с разбивкой по столбцам в ggplot2 без создания сводного фрейма данных?
Создайте штабелированный барплот, где каждый стек масштабируется до 100%
R сложенной процентной полосой с процентом двоичного коэффициента и меток (с ggplot)
Моя проблема в том, что я не могу разместить labels
там, где хочу - в середине баров.
Вы можете видеть проблему на изображении выше - ярлыки выглядят awfull и также перекрывают друг друга.
Сейчас я ищу:
-
Как разместить метки в середине экрана (области)
-
Как построить не все метки, но, например, более 10%?
-
Как решить совпадающую проблему?
Для Q 1.
@MikeWise предлагается возможное решение . Тем не менее, я все еще не могу справиться с этой проблемой.
Кроме того, я прилагаю воспроизводимый пример, как я построил этот 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("")