我用每日降雨数据和每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格式。
提前多多感谢, 蒂娜
答案 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")
其中任何一个都会提供此输出: