如何在ggplot2的两个柱状图中间添加二者的百分比比值标签
问题原因
你的geom_label继承了全局aes中的x=Species映射,所以会为每个类别(每个柱子)都生成一个标签。要实现仅在两柱中间显示单个标签的效果,只需要在标注时单独指定坐标,不继承全局的x轴映射即可。
修改后可运行代码
library(tidyverse) set.seed(1453) # 先保存统计计算结果,方便后续调用数值 plot_data <- iris %>% group_by(Species) %>% summarise(Sepal.Width = mean(Sepal.Width)) %>% sample_n(2) # 提前计算比例值 ratio <- scales::percent(plot_data$Sepal.Width[2] / plot_data$Sepal.Width[1]) ggplot(plot_data, aes(x = Species, y = Sepal.Width, fill = Species)) + geom_col(show.legend = FALSE) + # geom_col是stat=identity的geom_bar简写 # 单独指定标签位置,x=1.5对应两个离散柱子的中间横坐标 geom_label(x = 1.5, y = mean(plot_data$Sepal.Width), label = ratio, show.legend = FALSE)
补充说明
你也可以用annotate函数实现相同效果,不需要处理图层映射继承的问题,写法更简洁:
把上面代码中的geom_label行替换为以下内容即可:
annotate("label", x = 1.5, y = mean(plot_data$Sepal.Width), label = ratio)
如果需要调整标签位置,修改x和y的数值即可:x越大标签越靠右,y越大标签越靠上。
内容的提问来源于stack exchange,提问作者Samet Sökel
相关产品推荐
相关产品推荐

