我正在尝试创建一个在 x 轴上显示两个不同时间尺度的图。问题是这两个时间尺度有一个复杂的关系。
我想按一年中的日期和热量单位显示天气数据。热量单位是每天平均温度的累积。有些日子我们得到很多热量单位,有些日子没有那么多。我将样条曲线拟合到一年中的某一天和热量单位之间的关系,并用它来预测每一天的热量单位值。所以我确实有一个很好的数据集,其中包含以下标题:一年中的某一天(day)、热单位(gdd)、温度(temp)、降水量(precip)。
我创建了下图(可能需要在新窗口中打开):
使用此代码:
pdf(file="Climate 2010.pdf", family="Times")
par(mar = c(5,4,4,4) + 0.3)
plot(cobs10$day, cobs10$precip, col="white", type="h", yaxt="n", xaxt="n", ylab="",
xlab="")
axis(side=3, col="black", labels=FALSE)
at = axTicks(3)
mtext(side = 3, text = at, at = at, col="black", line = 1, las=0)
mtext("Day of Year", side=3, las=0, line = 3)
par(new=TRUE)
plot(cobs10$gdd, cobs10$temp, type="l", col="red", yaxt="n", ylab="", xlab="Thermal
Units")
axis(side=2, col='red', labels=FALSE)
at= axTicks(2)
mtext(side=2, text= at, at = at, col = "red", line = 1, las=0)
mtext("Temperature (C)", side=2, las=0, line=3)
par(new=TRUE)
plot(cobs10$gdd, cobs10$precip, type="h", col="blue", yaxt="n", xaxt="n", ylab="",
xlab="")
axis(side=4, col='blue', labels=FALSE)
at = axTicks(4)
mtext(side = 4, text = at, at = at, col = "blue", line = 1,las=0)
mtext("Precipitation (cm)", side=4, las=0, line = 3)
dev.off()
这正是我想要的,但我意识到这里的 x 轴刻度是线性的,它们不应该是线性的。我通过将我的降水数据设置为白色并在其上书写来放置顶部的 x 轴。看看当我把它变成绿色时会发生什么:
很明显,事情不匹配。 那么我怎样才能使两个轴相互成比例呢?
这是我一直在使用的小数据框,通过预测来匹配时间单位: cobs10.txt。“gdd”是热量单位
编辑:这是一些不使用 par(new=TRUE) 的新代码:
par(mar = c(5,4,4,4) + 0.3)
plot(cobs10$gdd, cobs10$temp, type="l", col="red", yaxt="n", xlab="", ylab="",
ylim=c(-25, 30))
lines(cobs10$gdd, cobs10$precip, type="h", col="blue", yaxt="n", xlab="", ylab="")
axis(side=3, col="black", at=cobs10$gdd, labels=cobs10$day)
want<-(c(1, 130, 150, 170, 190, 210, 230, 250, 270, 360))
mtext(side = 3, text = want, at = want, col="black", line = 1, las=0)
mtext("Day of Year", side=3, las=0, line = 3)
axis(side=2, col='red', labels=FALSE)
at= axTicks(2)
mtext(side=2, text= at, at = at, col = "red", line = 1, las=0)
mtext("Temperature (C)", side=2, las=0, line=3)
axis(side=4, col='blue', labels=FALSE)
at = axTicks(4)
mtext(side = 4, text = at, at = at, col = "blue", line = 1,las=0)
mtext("Precipitation (cm)", side=4, las=0, line = 3)