在R中为含缺失值的数据集绘制完整时间序列柱状图
解决方案
核心问题解答
要绘制完整时间轴的柱状图,必须先补全缺失的时间点并将对应pedestrian值设为NA——否则ggplot会直接跳过缺失的时间区间,无法呈现连续的时间轴。可以用imputeTS处理缺失值,结合ggplot2完成绘图,该方案同时适用于字符型日期和POSIXct类型日期。
一、处理字符型日期数据集
步骤1:加载依赖包
install.packages(c("tidyverse", "imputeTS", "lubridate")) library(tidyverse) library(imputeTS) library(lubridate)
步骤2:转换日期格式并补全时间序列
# 将字符型date转为POSIXct格式 testfile$date <- ymd_hms(testfile$date) # 生成覆盖全部时间范围的小时级连续时间序列 full_time_seq <- seq(min(testfile$date), max(testfile$date), by = "hour") full_time_df <- tibble(date = full_time_seq) # 左连接原始数据,缺失的pedestrian自动填充为NA full_data <- full_time_df %>% left_join(testfile, by = "date")
步骤3:(可选)用imputeTS填充缺失值
如果需要让时间序列连续展示(而非保留NA空缺),可以用插值方法填充:
# 线性插值填充NA full_data$pedestrian <- na_interpolation(full_data$pedestrian) # 也可选择移动平均等其他方法:na_ma(full_data$pedestrian, k = 2)
步骤4:用ggplot2绘制柱状图
ggplot(full_data, aes(x = date, y = pedestrian)) + geom_col(fill = "#2E8B57", alpha = 0.8) + scale_x_datetime(date_labels = "%m-%d %H", date_breaks = "6 hours") + labs(x = "时间", y = "行人数量", title = "小时级行人数量变化") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
二、处理POSIXct类型日期数据集
方案完全适用,且步骤更简洁(无需转换日期格式):
步骤1:补全时间序列
# 直接生成覆盖全部范围的小时级连续时间序列 full_time_seq <- seq(min(testfile$date), max(testfile$date), by = "hour") full_time_df <- tibble(date = full_time_seq) # 左连接补全NA full_data <- full_time_df %>% left_join(testfile, by = "date")
步骤2:(可选)填充缺失值
同字符型数据集的填充方法:
full_data$pedestrian <- na_interpolation(full_data$pedestrian)
步骤3:绘制柱状图
ggplot会自动识别POSIXct类型的时间轴,绘图代码与字符型数据集一致:
ggplot(full_data, aes(x = date, y = pedestrian)) + geom_col(fill = "#1E90FF", alpha = 0.8) + scale_x_datetime(date_labels = "%m-%d %H", date_breaks = "6 hours") + labs(x = "时间", y = "行人数量", title = "小时级行人数量变化(POSIXct)") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
内容的提问来源于stack exchange,提问作者leparc
相关产品推荐
相关产品推荐

