如何在ggplot2中让所有数值标签位于柱状图上方同一高度
实现方案
你当前代码的标签位置随柱高变化,是因为geom_text()默认继承了全局映射的y=fraction,没有指定统一高度,同时缺少和分组柱状图匹配的位置对齐参数,按以下修改即可实现所有数值标签在柱条上方同一高度显示:
- 提前计算一个固定的y轴坐标值作为标签统一高度,取值比你数据集里
fraction列的最大值高5%~10%即可,预留出标签和柱顶的间距 - 给
geom_text()单独指定y映射为这个固定值,覆盖全局的y映射 - 给
geom_text()设置和geom_bar()完全一致的position_dodge(width=0.9)参数,保证标签和对应组的柱条水平对齐,不会错位
修改后的完整可运行代码如下:
# 计算统一标签高度,可根据实际显示效果调整加号后的偏移量 label_y_pos <- max(figure_df$fraction) + 0.05 p <- ggplot(figure_df, aes(x=event_type, y=fraction)) + geom_bar(aes(fill=factor(method)), position=position_dodge(width=0.9), stat="identity") + facet_grid(~event_time, switch="x") + theme(axis.text.x = element_text(angle = 45,hjust = 1)) + geom_text( aes( y = label_y_pos, label = ifelse(method == 'THRIVE', round(pval, 2), "") ), position = position_dodge(width = 0.9) )
如果显示后觉得标签离柱顶太近或者太远,直接修改label_y_pos的数值即可:数值越大标签位置越高,数值越小则越贴近柱顶。
内容的提问来源于stack exchange,提问作者JVDeasyas123
相关产品推荐
相关产品推荐

