为什么从 geom_point 切换到 geom_line 时数据似乎丢失?

jay*_*esw 2 plot r time-series ggplot2

我创建了一个大型数据框(BEAVOutletWL_merge),我试图生成从各个列提取数据的图。当我输入以下代码时:

BEAVbaro <- ggplot(BEAVOutletWL_merge, aes(x=DateTime,y=BaroPres_kpa)) +
geom_point(size = .01)+
labs(x=NULL, y="BaroPres_kpa") + ylim(98, 103)+
theme()+ggtitle("Beaver Marsh")
BEAVbaro
Run Code Online (Sandbox Code Playgroud)

这是生成的图:

在此输入图像描述

但是,当我尝试使用以下代码将其绘制为线图时:

BEAVbaro <- ggplot(BEAVOutletWL_merge, aes(x=DateTime,y=BaroPres_kpa)) +
geom_line(size = .5)+
labs(x=NULL, y="BaroPres_kpa") + ylim(98, 103)+
theme()+ggtitle("Beaver Marsh")
BEAVbaro
Run Code Online (Sandbox Code Playgroud)

该图的生成:

在此输入图像描述

我唯一改变的是“geom_point”到“geom_line”和大小(出于美观目的),但有谁知道为什么 01/22 和 07/22 之间的大块数据突然在线图上消失?

谢谢!

Ben*_*ker 5

因为ggplot在有值的行中留下空白NA,所以值两侧的点NA不会显示为geom_line。例子:

library(ggplot2)
library(cowplot)
dd <- data.frame(x = 1:10,
                 y  = c(1, NA, 3, NA, 5, NA, 7, NA, 9, 10))

gg0 <- ggplot(dd, aes(x,y))

plot_grid(gg0 + geom_point(), gg0 + geom_line())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您可以使用线性插值,则可以使用以下方法解决此问题na.omit()

gg0  %+% na.omit(dd) + geom_line()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这会很有趣,但比我现在有时间在每个NA侧翼数据点的位置绘制占位符(例如短水平破折号)更具挑战性..)