1

我正在尝试创建一个在 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)
4

1 回答 1

0

使用它几乎从来都不是一个好主意par(new=TRUE),它导致的问题多于解决的问题。

您应该决定要使用哪些 x 轴单位,天或热量单位,并使用该单位创建初始图形,然后使用类似pointslines使用现有单位向现有图形添加任何其他点或线的函数。然后,您可以使用该axis函数添加另一个轴,使用原始单位作为at参数,然后转换为其他单位作为标签(您需要决定是否希望刻度的位置与原始单位匹配,或者位于为转换后的单位提供漂亮值的位置)。

于 2013-03-29T20:59:22.213 回答