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
相关产品推荐
相关产品推荐

