ggplot使用geom_line绘制时间序列仅显示部分数据如何解决
问题原因及排查解决方法
核心原因
大概率是日期列解析错误:你当前用dmy()(日月年顺序)解析原始CSV的日期列,但EIA是美国机构,公开的CSV文件默认日期格式为月/日/年(mdy),比如1/13/2023代表2023年1月13日。用dmy()解析时,会把字符串第二个位置的数值当作月份,一旦该数值超过12,就会返回NA,最终只有日期字符串第二个位置<=12的记录能保留,所以看起来只有1月的节点被渲染。
排查步骤
- 先验证日期解析是否正确,执行以下代码查看原始日期和转换后日期的对应关系,统计空值数量:
# 查看前20条日期转换结果 head(raw_data[, c("date", "date2")], 20) # 统计转换后为空的日期数量 sum(is.na(raw_data$date2)) # 查看清洗后数据的日期范围和行数,10年左右的月度数据应该有120条左右记录 range(frmt_data$date2) nrow(frmt_data)
- 再验证价格列是否存在空值:
sum(is.na(frmt_data$price))
- 如果上述检查都无异常,执行
head(raw_data)查看CSV导入是否正常,确认是否存在分隔符识别错误、列错位的问题。
解决方法
如果确认是日期解析错误,只需要把日期转换的代码从dmy(date)改成mdy(date)即可:
raw_data <- read.csv("H:/Projects/gas prices2.csv") %>% mutate(date2 = as.Date(mdy(date)))
如果解析后还有少量NA值,可以检查原始CSV里对应行的日期格式是否存在异常,手动修正或者删除异常行即可。
内容的提问来源于stack exchange,提问作者Quinterpret
相关产品推荐
相关产品推荐

