R语言中geom_bar无法正确展示数据的问题及条件处理需求
解决ggplot geom_bar因重复数据高度翻倍的问题
问题本质
你的数据集里部分date对应两行完全相同的TempAmb_Avg值,geom_bar默认会对同一x轴分组下的所有数值求和累加,所以条形高度变成了真实值的两倍;而geom_line是基于点的位置连线,不会累加重复值,因此显示正常。直接把所有TempAmb_Avg除以2会破坏非重复数据的准确性,所以需要针对性处理重复行。
解决方案代码
用dplyr包对数据做分组修正(未安装的话先运行install.packages("dplyr")):
library(dplyr) library(ggplot2) # 处理重复数据:仅对重复date的行修正数值 processed_data <- your_data %>% group_by(date) %>% mutate( # 如果该日期有2行重复,数值除以2;否则保持原样 TempAmb_Avg_corrected = ifelse(n() == 2, TempAmb_Avg / 2, TempAmb_Avg) ) %>% ungroup() # 绘制修正后的条形图 ggplot(processed_data, aes(x = date, y = TempAmb_Avg_corrected)) + geom_bar(stat = "identity")
扩展适配
如果数据集里存在超过2行的重复日期(比如同一日期有3行相同值),可以把判断逻辑改成按重复次数均分,确保累加后高度正确:
processed_data <- your_data %>% group_by(date) %>% mutate( TempAmb_Avg_corrected = TempAmb_Avg / n() ) %>% ungroup()
这样不管同一日期有多少重复行,geom_bar的高度都会对应真实的单值数据。
内容的提问来源于stack exchange,提问作者Cláudio Siva
相关产品推荐
相关产品推荐

