假设我们想要使用R ggplot来生成一个条形图,显示某个类别变量在另一个类别变量中的百分比 . 下面是R中的一个小数据框和一些代码,以获得我想要的漂亮漂亮的条形图 .
MYDATA <- data.frame(Region = c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5),
Sex = c("M", "F", "M", "F", "M", "F", "M", "F", "M", "F"),
Count = c(185, 130, 266, 201, 304, 283, 102, 60, 55, 51));
library(ggplot2);
ggplot(data = MYDATA, aes(x = Region, y = Count, fill = Sex)) +
geom_bar(position = "fill", stat = 'identity') +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("Maroon1", "RoyalBlue1")) +
ggtitle("Figure 1: Sex breakdown by Region") +
xlab("Region") + ylab("Percentage");
现在,我想通过添加显示条形内部原始计数值的文本来补充此条形图 . 对于女性,我希望计数显示在图表的顶部,在粉红色的条形图内 . 对于雄性,我希望计数显示在图形的底部,在蓝色条形图内 . 我曾尝试使用 geom_text
,但我无法弄清楚如何将标签放在我想要的位置 . 相反,我的尝试通常导致计数值被置于它们自己的值,这会破坏图中百分比的比例 . Can any of you learned people tell me how to add the raw count values as text in the bars without ruining the rest of the plot?
1 回答
好的,所以在发布这个问题之后我找到了一个解决方案 . 尽管回答了我自己的问题(对不起家伙),我会留下这篇文章以防万一有人遇到他们需要解决的同样问题 . 请随意添加其他解决方案 .
最终工作的诀窍是打破问题,为每个性别指定单独的标签,使用两个调用
geom_text
,使用ifelse
命令一次仅为一个性别输入标签,并在每个语句中在所需高度处手动y定位 . 这是代码和情节: