假设我们想要使用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,但我想不出如何将标签放在我想要的位置。相反,我的尝试通常会导致计数值被放置在自己的值中,从而破坏了地块中百分比的比例。,你们中有谁能告诉我如何在不破坏其余情节的情况下,将原始计数值作为文本添加到条形图中?
发布于 2018-03-27 03:01:57
好吧,在发完这个问题后,我想出了一个解决办法。尽管回答了我自己的问题(对不起,伙计们),我还是会离开这个岗位,以防任何人有同样的问题需要解决。请随意添加其他解决方案。
最终起作用的诀窍是通过两次调用geom_text,每次只输入一种性别的标签,并在每个语句的期望高度处手动y-定位,从而解决问题,为每种性别指定单独的标签。下面是代码和情节:
ggplot(data = MYDATA, aes(x = Region, y = Count, fill = Sex)) +
geom_bar(position = "fill", stat = 'identity') +
geom_text(aes(label = ifelse(Sex == "F", Count, "")), y = 0.95) +
geom_text(aes(label = ifelse(Sex == "M", Count, "")), y = 0.05) +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("Maroon1", "RoyalBlue1")) +
ggtitle("Figure 1: Sex breakdown by Region") +
xlab("Region") + ylab("Percentage");

https://stackoverflow.com/questions/49503529
复制相似问题