plot.zoo打印行尽管有NA值

时间:2017-12-13 11:30:11

标签: r plot na zoo

我用每日降雨数据和每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 个答案:

答案 0 :(得分:0)

1)屏幕将温度绘制两次 - 一次使用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")

其中任何一个都会提供此输出:

screenshot