问题
我有三个变量随时间变化的记录。第一个(黑色)在每个时间段记录,第二个(蓝色)每隔一个时间段记录,第三个(红色)在除一个时间段之外的每个时间段记录。我试着在R中绘制这些:
test <- data.frame(time=c(1:5), black=c(3, 3, 3, 3, 3), blue=c(1, NA, 3, NA, 5), red=c(5, 4, NA, 2, 1))
plot(test$time, test$black, type="l", col="black")
lines(test$time, test$blue, col="blue")
lines(test$time, test$red, col="red")
结果是一个图,其中“黑色”是唯一的连续线,“蓝色”完全不存在,并且“红色”在时间2和时间4之间不存在。我希望这三条线都是连续的。
尝试的解决方案
从How to connect dots where there are missing values?
plot(na.omit(test), test$time, test$black, type="l", col="black")
返回“match.fun(panel)中的错误:'test$black'不是函数、字符或符号”。
na.omit(test)
plot(test$time, test$black, type="l", col="black")
lines(test$time, test$blue, col="blue")
lines(test$time, test$red, col="red")
图与我原来的问题相同,实际上省略了其中一个变量缺失数据的每个时间段,因此实际数据(在本例中,对于黑色)与其他变量缺失数据的每个时间段一起被省略。
从How to I draw a line plot and ignore missing values in R
plot(type="l", test$time, test$black, col="black")
lines(which(!is.na(test$blue)), na.omit(test$blue), test$time, test$blue, col="blue")
lines(test$time, test$red, col="red")
返回“错误在plot.xy(xy.coords(x,y),type = type,...):无效的绘图类型“”。即使将第一行修改为plot(test$time, test$black, col="black")
也不能解决此错误。
从How to connect dots where there are missing values?
plot(approx(test, xout=seq_along(test))$y, type="l", test$time, test$black, col="black")
返回“xy.coords(x,y,xlabel,ylabel,log)中的错误:'x'和'y'长度不同”。
关于R - Plotting a line with missing NA values
有评论说,na.omit()或na.approx()“似乎只有当我在一个独立的图中单独绘制'A'时才能工作,它们似乎不能与'时间'和'B'和'C'一起工作,所有这些都在同一个图中 ”,这是一个“ 超级奇怪的bug”。他们建议:
plot(test$time[!is.na(test$black)],test$black[!is.na(test$black)],type="l")
lines(test$time,test$blue, type="l",col="blue")
lines(test$time, test$red, type="l", col="red")
情节和我原来的问题一样。如果我将'blue'的编码更改为(test$time, test$blue, type="p", col="blue")
,那么我在时间点3得到一个点,但不是我期望的线。
关于R - Plotting a line with missing NA values
xlim <- range(test$time)
ylim <- range(subset[-1], na.rm = TRUE)
快速返回“Error in subset[-1]:类型为“closure”的对象不可作为子对象。
ok <- ! is.na(test$black)
plot(black ~ time, time, time = ok, type = "l", xlim = xlim, ylim = ylim)
快速返回“Error in FUN(Xi,...):类型“闭包”的“envir”参数无效。我也看不出“蓝色”或“红色”数据如何进入这个图,即使它没有返回错误。
那么,当其中一个变量有缺失数据时,有没有办法使用plot()来绘制多个变量随时间的变化?
2条答案
按热度按时间uinbv5nw1#
如果你想在数据缺失的时候把这些点连接起来,你可以使用library(zoo)
ccrfmcuu2#
使用
approx
插值每个y轴向量。要绘制插值结果,首先打开一个空图,然后使用mapply
循环将每个列和线的颜色传递给插值和绘制代码。创建于2023-06-15,使用reprex v2.0.2