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

如何在ggplot水平条形图中为数值添加K/M后缀替代完整数字?

解决ggplot水平条形图数值添加K/M后缀的问题

问题说明

需要在ggplot绘制的水平条形图中,将totalEarnings的原始数值四舍五入后添加“K”(千)或“M”(百万)后缀展示,但尝试geom_text(aes(label=label_number(scale=1e-3, suffix='K')))未生效。原代码如下:

db %>%
  ggplot(aes(x = reorder(name, totalEarnings), y = totalEarnings, fill = totalEarnings)) + 
  geom_bar(stat = "identity", show.legend = FALSE) + 
  coord_flip() + 
  theme(plot.background = element_blank(),
     panel.background = element_blank(),
     axis.title = element_blank(),
     axis.text.x = element_blank(),
     axis.text.y = element_text(colour = "black")) +
  geom_text(aes(label = totalEarnings), size = 3, hjust = -0.1, color = "black", fontface = "bold")

解决方案

关键问题点

  • 未加载scales包:label_number是scales包中的函数,必须先加载该包或使用命名空间调用。
  • 未传入待转换的数值:label_number需要明确指定要格式化的变量(即totalEarnings)。

优化后代码

推荐使用scales::label_number_si()自动识别数值量级并添加对应后缀(K/M等),无需手动指定缩放比例:

# 先加载scales包,或直接用命名空间调用
library(scales)

db %>%
  ggplot(aes(x = reorder(name, totalEarnings), y = totalEarnings, fill = totalEarnings)) + 
  geom_bar(stat = "identity", show.legend = FALSE) + 
  coord_flip() + 
  theme(plot.background = element_blank(),
     panel.background = element_blank(),
     axis.title = element_blank(),
     axis.text.x = element_blank(),
     axis.text.y = element_text(colour = "black")) +
  # 修改geom_text的label参数,自动格式化数值
  geom_text(aes(label = label_number_si()(totalEarnings)), 
            size = 3, hjust = -0.1, color = "black", fontface = "bold")

如果需要统一指定量级(比如强制用百万单位),可以用label_number手动设置:

geom_text(aes(label = label_number(scale = 1e-6, suffix = "M")(totalEarnings)), 
          size = 3, hjust = -0.1, color = "black", fontface = "bold")

效果说明

修改后,条形图旁的数值会被自动四舍五入并添加对应量级后缀,比如原始数值130000000会显示为130M,500000会显示为500K。

内容的提问来源于stack exchange,提问作者paolotroia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:35:13