在R的ggplot中绘制双变量时序图时仅移除单个变量的NA值
解决ggplot绘制含NA变量的时间序列图问题
你的代码存在两个核心问题:
- 管道中调用了还未生成的对象
cov_vs_no_scent_share_plot,这会直接导致行不匹配报错; - 过滤逻辑错误,没有区分两个变量的保留规则(
new_cases需全保留,no_scent_share仅保留非NA值)。
正确实现代码
推荐使用tidyr::pivot_longer(比gather更直观的现代函数)转成长格式,再针对性过滤:
library(tidyverse) cov_vs_no_scent_share_plot <- cov_vs_no_scent_share %>% pivot_longer(cols = c(new_cases, no_scent_share), names_to = "key", values_to = "value") %>% # 保留new_cases的所有行,仅过滤no_scent_share的NA值 filter(key == "new_cases" | !is.na(value)) %>% ggplot(aes(x = Date, y = value, colour = key)) + geom_line() + # 必须添加线图层,否则仅生成绘图对象不会显示图 labs(x = "日期", y = "数值", colour = "变量") # 自定义坐标轴和图例标签
代码说明
pivot_longer将宽格式数据转为长格式,每行对应一个日期+变量的组合;filter条件确保:- 所有
new_cases的记录都保留,不管对应日期的no_scent_share是否为NA; - 仅保留
no_scent_share中非NA的记录,避免NA值在图上出现异常线条;
- 所有
- 原代码仅定义了绘图映射,必须添加
geom_line()等图层才能生成可视化图表。
内容的提问来源于stack exchange,提问作者Michael Volkmann
相关产品推荐
相关产品推荐

