用R绘制一条具有缺失NA值的线

3

我有一个名为"subset"的数据框。

Time            A   B   C
2016-10-07 06:16:46 NA  NA  41 
2016-10-07 06:26:27 40  39  42
2016-10-07 06:38:23 NA  40  NA
2016-10-07 06:41:06 42  42  44
2016-10-07 06:41:06 NA  42  44
2016-10-07 06:41:06 NA  42  44
2016-10-07 06:41:07 44  43  48
2016-10-07 06:41:41 NA  43  48
2016-10-07 06:42:44 45  42  48
2016-10-07 06:48:40 46  45  48

我希望有一个图表,其中“时间”作为x轴,“A”是一条线,“B”和“C”是点。
然而,当我绘制它时,只有连接最后两个点(45和46)的“A”线出现,因为这些是“A”中仅有的连续两个值。图表忽略了“A”值之间的NA,而不是通过NA绘制连接这些值的线。为此,我使用以下代码:
plot(subset$Time,subset$A,type="l",ylim=c(min(subset$B,na.rm=TRUE)-5,max(subset$C,na.rm=TRUE)+5),xlim=c(as.POSIXct(min(subset$Time)),as.POSIXct(max(subset$Time))))
lines(subset$Time,subset$B,type="p",col=27)
lines(subset$Time,subset$C,type="p",col=134)

我尝试了na.omit()和na.approx()等解决方案,但这些方案似乎只适用于在独立的图中绘制"A",它们无法与"Time"、"B"和"C"一起在同一个图中使用。


今天我也遇到了一个非常奇怪的错误。 - wolfsatthedoor
2个回答

5
你可以使用索引来代替na.omit():以下代码可实现此功能:
plot(subset$Time[!is.na(subset$A)],subset$A[!is.na(subset$A)],type="l")  
# with your xlim and ylim, of course

lines(subset$Time,subset$B,type="p",col=27)
lines(subset$Time,subset$C,type="p",col=134)

0

试试这个:

xlim <- range(subset$Time)
ylim <- range(subset[-1], na.rm = TRUE)
plot(A ~ Time, na.omit(subset[1:2]), type = "l", xlim = xlim, ylim = ylim)
points(B ~ Time, subset, col = 27)
points(C ~ Time, subset, col = 134)

另一种可能性是使用plotsubset=参数,此时我们将上面的plot行替换为:

ok <- ! is.na(subset$A)
plot(A ~ Time, subset, subset = ok, type = "l", xlim = xlim, ylim = ylim)

无论哪种情况,我们都会得到这个图形:

screenshot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接