R + ggplot2 => 在分面饼图上添加标签

23

我想在分面饼图上添加数据标签。
也许有人可以帮助我。

我的数据:

year <- c(1,2,1,2,1,2)
prod <- c(1,1,2,2,3,3)
quantity <- c(33,50,33,25,34,25)

df <- data.frame(year, prod, quantity)
rm(year, prod, quantity)

代码:

library(ggplot2)

# center's calculated by hand
centr2 <- c(16, 25, 49, 62.5, 81, 87.5)

ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
    geom_bar(stat="identity") +
    geom_text(aes(x= factor(1), y=centr2, label = df$quantity), size=10) +
    facet_grid(facets = .~year, labeller = label_value) +
    coord_polar(theta = "y")

我的结果是:

饼图

如果我删除coord_polar(theta = "y"),则会得到以下的图表:

柱状图

现在我明白了为什么我的数据标签不匹配。
但我不知道该如何修复它。

我阅读了以下内容:
1. 在饼图上放置标签
2. 在具有分面密度图的ggplot中添加文本
3. 饼图上的文本重叠

但是没有找到答案。

1个回答

24

我会通过在df中定义另一个变量(我称之为pos),来计算文本标签的位置。我使用dplyr来完成此操作,当然你也可以使用其他方法。

library(dplyr)
library(ggplot2)

df <- df %>% group_by(year) %>% mutate(pos = cumsum(quantity)- quantity/2)

ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
  geom_bar(stat="identity") +
  geom_text(aes(x= factor(1), y=pos, label = quantity), size=10) +  # note y = pos
  facet_grid(facets = .~year, labeller = label_value) +
  coord_polar(theta = "y")

馅饼


3
请问您能否解释一下您计算数字位置的原理? - Kots

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接