如何让ggplot2水平条形图的数值文本自动居中显示?
问题描述
我有一个名为df的数据框,代码如下:
df = tibble(var =c("A","B","C","D","E"), val = c(2,8,9,1,5) );df
运行结果为:
var val <chr> <dbl> 1 A 2 2 B 8 3 C 9 4 D 1 5 E 5
我希望绘制val列的水平条形图,并让每个类别的数值文本显示在条形中间。我使用了以下代码:
ggplot(df, aes(x = var, y = val)) + geom_bar(stat = "identity", fill = "lightgrey") + coord_flip() + # 翻转坐标生成水平条形图 geom_text(aes(label = val))
生成的图表中数值文本显示在条形右端,而非中间位置。请问如何让数值文本自动显示在水平条形的中间位置?
解决方案
问题源于geom_text的默认位置设置:默认情况下文本会被放在y = val的位置(对应垂直条形的顶端),经过coord_flip()翻转后,这个位置就变成了水平条形的右端。要让文本居中,只需将geom_text的y轴位置设为条形高度的一半(即val / 2)即可:
library(ggplot2) library(tibble) df = tibble(var =c("A","B","C","D","E"), val = c(2,8,9,1,5)) ggplot(df, aes(x = var, y = val)) + geom_bar(stat = "identity", fill = "lightgrey") + geom_text(aes(label = val, y = val / 2)) + # 将文本定位在条形高度中点 coord_flip()
调整后,数值文本会自动显示在每个水平条形的中间位置。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

