You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:10:08