我正在尝试创建一个在x轴上显示两个不同时间刻度的图。问题是两个时间尺度有一个复杂的关系。
我想显示一年中的天气数据和热量单位。热量单位是每天平均温度的累积。有些日子我们得到了很多热量单位,有些日子没那么多。我将样条拟合到日期和热量单位之间的关系,并使用它来预测每天的热单位值。所以我确实有一个很好的数据集,其中包含以下标题:年中的一天(日),热单位(gdd),温度(温度),降水(降水)。
我创建了下图(可能必须在新窗口中打开):
使用此代码:
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)
答案 0 :(得分:0)
使用par(new=TRUE)
几乎不是一个好主意,它会导致比解决的问题更多的问题。
您应该决定要使用哪个x轴单位,天数或热单位并使用该单位创建初始图表,然后使用points
或lines
等函数添加任何其他点或线使用现有单位到现有图表。然后,您可以使用axis
函数添加另一个轴,使用at
参数的原始单位,然后转换为标签的其他单位(您需要确定是否需要这些位置与原始单位匹配的刻度线,或者在为转换后的单位提供漂亮值的位置)。