plot.zoo 尽管 NA 值打印行
plot.zoo print line despite NA values
我正在绘制一个动物园对象,其中包含每日降雨数据和每 4 天的一些水温测量值。合并数据时,我在这几天之间得到了一些 NA 数据,因此这条线没有连接点。这是一个(非常)最小的例子,布局很糟糕:
install.packages('zoo')
library(zoo)
Datum<-as.Date(c("2017-07-01", "2017-07-02", "2017-07-03", "2017-07-04"))
data<-as.data.frame(Datum)
data$Rain<-c(3,5,6,7)
data$Temperature<-c(10, NA, 11, 12)
data.zoo<-read.zoo(data, by=Datum)
plot(data.zoo, type=c("h", "o"), lwd=c(5,1), col=c("blue", "red"))
我需要的是温度数据点之间的连线。我几乎在这里 Plotting xts objects works with points but not with lines 找到了答案。然而,插值等数据是不可能的(或有意义的),我知道连接准时数据在科学上是不正确的,但如果我不这样做,这些图真的不直观,25 个图之间的光学比较非常困难。这就是为什么我想要点之间的线。
不合并数据并因此不生成 NA 是不可能的,否则代码块将不再工作。代码块有点复杂(对于我的编码水平),例如降雨数据和温度数据在同一屏幕上,花式轴标签,并包含一个 for 循环以自动打印每组 pdf 等。
非常感谢,
蒂娜
1) screens 两次绘制温度——一次使用 na.approx
填充空 NA 以防止线条被打断,然后再次使用点作为线条所以这些点是可见的。使用screens=
指定线和点叠加在同一个面板上。
plot(cbind(data.zoo, na.approx(data.zoo$Temperature)),
screens = c("Rain", "Temperature", "Temperature"),
type = c("h", "p", "l"),
lwd = c(5, 1, 1),
col = c("red", "blue", "blue"),
main = "Temperature and Rain")
2) 面板 这也可以使用自定义面板功能来完成:
my.panel <- function(x, y, ..., pf = parent.frame()) {
if (pf$panel.number == 1) {
lines(x, y, type = "h", col ="red", lwd = 5)
} else {
lines(x, na.approx(y), col = "blue")
points(x, y, col = "blue")
}
}
plot(data.zoo, panel = my.panel, main = "Temperature and Rain")
其中任何一个都会给出这个输出:
我正在绘制一个动物园对象,其中包含每日降雨数据和每 4 天的一些水温测量值。合并数据时,我在这几天之间得到了一些 NA 数据,因此这条线没有连接点。这是一个(非常)最小的例子,布局很糟糕:
install.packages('zoo')
library(zoo)
Datum<-as.Date(c("2017-07-01", "2017-07-02", "2017-07-03", "2017-07-04"))
data<-as.data.frame(Datum)
data$Rain<-c(3,5,6,7)
data$Temperature<-c(10, NA, 11, 12)
data.zoo<-read.zoo(data, by=Datum)
plot(data.zoo, type=c("h", "o"), lwd=c(5,1), col=c("blue", "red"))
我需要的是温度数据点之间的连线。我几乎在这里 Plotting xts objects works with points but not with lines 找到了答案。然而,插值等数据是不可能的(或有意义的),我知道连接准时数据在科学上是不正确的,但如果我不这样做,这些图真的不直观,25 个图之间的光学比较非常困难。这就是为什么我想要点之间的线。
不合并数据并因此不生成 NA 是不可能的,否则代码块将不再工作。代码块有点复杂(对于我的编码水平),例如降雨数据和温度数据在同一屏幕上,花式轴标签,并包含一个 for 循环以自动打印每组 pdf 等。
非常感谢, 蒂娜
1) screens 两次绘制温度——一次使用 na.approx
填充空 NA 以防止线条被打断,然后再次使用点作为线条所以这些点是可见的。使用screens=
指定线和点叠加在同一个面板上。
plot(cbind(data.zoo, na.approx(data.zoo$Temperature)),
screens = c("Rain", "Temperature", "Temperature"),
type = c("h", "p", "l"),
lwd = c(5, 1, 1),
col = c("red", "blue", "blue"),
main = "Temperature and Rain")
2) 面板 这也可以使用自定义面板功能来完成:
my.panel <- function(x, y, ..., pf = parent.frame()) {
if (pf$panel.number == 1) {
lines(x, y, type = "h", col ="red", lwd = 5)
} else {
lines(x, na.approx(y), col = "blue")
points(x, y, col = "blue")
}
}
plot(data.zoo, panel = my.panel, main = "Temperature and Rain")
其中任何一个都会给出这个输出: