R 使用ggplot向具有比例的堆叠条形图添加标签

R 使用ggplot向具有比例的堆叠条形图添加标签,r,ggplot2,R,Ggplot2,我正在尝试将标签添加到堆叠条形图中,以显示比例。我已经能够创建图表,但还无法成功添加标签。我得到了一些标签,但它们居中并相互覆盖……我知道有人问过这个问题,但我还没有找到一个有效的解决方案 数据是整齐的,因为它很长 尝试在geom\u栏之后添加此项 geom\u文本(aes(y=cumsum(折纸)-折纸/2,标签=等级),show.legend=F) 将y变为y变量减去一半y变量的累积求和(CUMUM)将文本放置在每个条的每个部分的中间。 您还可以添加颜色美学,并可能将等级转换为具有定义颜

我正在尝试将标签添加到堆叠条形图中,以显示比例。我已经能够创建图表,但还无法成功添加标签。我得到了一些标签,但它们居中并相互覆盖……我知道有人问过这个问题,但我还没有找到一个有效的解决方案

数据是整齐的,因为它很长


尝试在
geom\u栏之后添加此项

geom\u文本(aes(y=cumsum(折纸)-折纸/2,标签=等级),show.legend=F)

将y变为y变量减去一半y变量的累积求和(CUMUM)将文本放置在每个条的每个部分的中间。 您还可以添加颜色美学,并可能将等级转换为具有定义颜色值的因子,这似乎是可行的

但是,我想更改字体颜色,但我看不出能够成功地做到这一点

例如,我希望标签字体为粗体,A和B的字体为白色,C的字体为黑色。谢谢


我希望C级的标签是黑色的,A级和B级的标签也是白色的。此外,由于某种原因,x轴标签会移到刻度的右侧?你知道为什么会这样吗?你想要每个条都有文字吗?如果是这样的话,请检查geom_text()函数是的-我已经尝试了使用该函数和其他东西的多次迭代-还没有找到一个有效的解决方案,并且一直遇到问题(就像我们大多数新手一样)。您可以添加您使用的失败的
geom_text()
调用吗?如果它们彼此重叠,您可能会丢失
位置\u stack()
,在这种情况下,人们可能会向您指出重复的位置。如果你有一个关于文本颜色的额外问题,你应该把它添加到你的问题中(或者可能问一个新问题:)。这是关于R的一个令人沮丧的事情——我认为它很简单,但如果没有一些帮助,我就是想不出来。我希望在每个月为每组添加标签,因此最右边的最近一个月将有大约66.5%的A级、25.0%的B级和8.5%的C级。其他月份将显示其各自的比例。。。
ggplot(data=dat) + 
  geom_bar(stat="identity", 
           mapping = aes(x=Vintage, y=OrigAmt, fill=fct_rev(Grade)),
           position = "fill") + 
  ggtitle("Proportions by Grade") +
  scale_fill_manual(values = c("grey", "gray40", "black")) + 
  guides(fill = guide_legend(reverse = TRUE, title="Grade")) + 
  scale_y_continuous(name="Proportion",label=percent_format()) +
  theme_bw() +
  theme(plot.title = element_text(hjust=0.5),
        panel.border = element_blank(), 
        panel.grid = element_blank(),
        axis.text.x = element_text(angle = 90))
ggplot(data = dat, 
       aes(y = freq, x = Vintage, fill = fct_rev(Grade))) +
  geom_col() +
  geom_text(aes(label = paste0(freq,"%")),
            position = position_stack(vjust = 0.5), size = 2) +
  scale_y_continuous(
    labels = dollar_format(suffix = "%", prefix = "")) +
  labs(title = "Distribution by Vintage",
       subtitle = "xxx") +
  labs(x = NULL, y = "Percentage") +
  theme_bw() +
  theme(legend.position = "bottom", 
        legend.direction = "horizontal",
        legend.title = element_blank()) +
  guides(fill = guide_legend(reverse = T)) +
  scale_fill_manual(values = c("grey", "gray40", "brown")) +
  theme(axis.text.x = element_text(angle = 90),
        axis.text.x.bottom = element_text(vjust = 0.5))