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

R语言ggplot2中geom_text在柱状图上方显示频数的问题:代码显示数值1而非正确计数的解决问询

问题排查与解决方案

你的问题出在geom_text的统计量使用上——你已经预先把数据汇总成了带频数的df_date表,但却用了stat="count"让ggplot重新计数,这就导致每个日期行被计为1,自然显示出数字1。

修正思路:

既然已经有了现成的Freq列(就是你要的频数),直接用这个列作为标签即可,不需要再让ggplot重新统计计数。

修正后的完整代码:

# 加载库
library(ggplot2)
# 1. 读取数据(分号分隔,修正换行格式保证数据读取正确)
df = read.csv2(text = "Id;Date
1;2021-06-09
2;2021-06-08
3;2021-06-08
4;2021-06-09
5;2021-06-09")
# 2. 生成频数表
df_date <- df[, "Date"]
df_date <- as.data.frame(table(df_date))
colnames(df_date)[which(names(df_date) == "df_date")] <- "Date" # 将列名设置为Date
df_date
# 3. 绘制柱状图(修正geom_text部分)
ggplot(df_date, aes(x = Date, y = Freq)) + 
  geom_bar(stat = "identity") + 
  theme_classic() + 
  ggtitle("Date") + 
  xlab("Date") + 
  ylab("Frequency") + 
  # 直接使用已有的Freq列作为标签,设置y轴位置在柱子顶部+小偏移
  geom_text(aes(label = Freq), y = df_date$Freq + 0.1, vjust = 0)

关键调整说明:

  • 移除了geom_text中的stat="count",因为不需要重新统计
  • 用label = Freq直接调用汇总好的频数数值
  • y = df_date$Freq + 0.1给标签加了一点垂直偏移,避免文字紧贴柱子顶端(你可以根据自己的数据调整这个偏移量,比如如果频数很大,就加0.5或者1)
  • vjust = 0让文字底部对齐柱子顶端,也可以改成vjust = -0.5让文字完全在柱子上方居中

运行这段代码后,2021-06-08的柱子上方会显示2,2021-06-09的柱子上方会显示3,就是你想要的效果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:52:47