x 軸に 2 つの異なる時間スケールを示すプロットを作成しようとしています。問題は、2 つの時間スケールが複雑な関係にあることです。
気象データを日別および熱量単位で表示したいと思います。熱量単位は、毎日の平均気温の累積です。熱量ユニットを大量に取得する日もあれば、それほど多くない日もあります。年間通算日と熱単位の関係にスプラインを当てはめ、それを使用して各日の熱単位の値を予測しました。だから私は次のヘッダーを持つ素晴らしいデータセットを持っています:年の日(日)、熱単位(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 軸を入れました。緑色にするとどうなるか見てみましょう:
物事が一致しないことは明らかです。 では、どうすれば 2 つの軸を互いにスケールさせることができるでしょうか?
これは、予測によって時間単位が一致する場所で使用している小さなデータフレームです: 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)