我有一个数据框,我想从中制作一个显示 % 标签的饼图
这是我首先做的
SubSegment<- c('S1','S2','S3','S4')
v <- c(100, 300, 500, 200)
df<- cbind.data.frame(SubSegment, v)
#calculations for % labels in chart
df <- df %>%
arrange(desc(SubSegment)) %>%
mutate(prop = v / sum(df$v)) %>%
mutate(ypos = cumsum(prop)- 0.5*prop ) %>%
mutate(label= prop*1)
df[5] = sapply(df[5], function(x) scales::percent(x, accuracy = 0.1))
plot.ex <- ggplot(df, aes(x = "", y = prop, fill = SubSegment)) +
geom_bar(width = 1, stat = "identity", color="white", alpha=0.8) +
coord_polar("y", start = 0) +
theme_void() +
geom_text(aes(y = ypos, label = label), size=3, color = "white") +
scale_fill_brewer(palette="Set1")
如您所见,标签看起来很棒,而且它们在正确的位置,但令我困扰的是因素的顺序是按字母顺序排列的,我希望具有最大价值的公司首先显示在图例中,所以我添加了一行剧情前的代码:
df$SubSegment <- factor(df$SubSegment, levels=df$SubSegment[order(-(df$prop))], ordered=TRUE)
这样做之后,情节图例中的因素的顺序是我想要的,但是标签都弄乱了(它们不会随着馅饼块相应地移动)。
基本上我想知道如何编辑我的ypos行,以便在饼图移动时标签会相应移动。