繁体   English   中英

一个R图上的两个x轴刻度

[英]Two x-axis scales on one R plot

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

使用par(new=TRUE)几乎从来不是一个好主意,它引起的问题超出了解决的范围。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM