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))