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

一个R图上的两个x轴刻度,r,plot,R,Plot,我试图创建一个在x轴上显示两个不同时间刻度的绘图。问题是这两个时间尺度有着复杂的关系 我想展示一年中每天的天气数据和热量单位。热量单位是每天平均温度的累积。有些日子我们有很多热单位,有些日子没有那么多。我将样条曲线拟合到一年中的某一天和热量单位之间的关系,并用它来预测每天的热量单位值。所以我有一个很好的数据集,有以下标题:一年中的一天(day),热量单位(gdd),温度(temp),降水量(precip) 我创建了下图(可能必须在新窗口中打开): 使用此代码: pdf(file="Climate

我试图创建一个在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轴放进去。看看我把它变成绿色时会发生什么:

很明显,事情不匹配那么如何使两个轴彼此成比例?

下面是我一直使用的一个小数据帧,其中时间单位通过预测匹配: . “gdd”是热单位

编辑:以下是一些不使用par的新代码(new=TRUE):

par(mar=c(5,4,4)+0.3)
绘图(cobs10$gdd,cobs10$temp,type=“l”,col=“red”,yaxt=“n”,xlab=“”,ylab=“”,
ylim=c(-25,30))
行(cobs10$gdd,cobs10$precip,type=“h”,col=“blue”,yaxt=“n”,xlab=”“,ylab=”“)
轴(侧=3,col=“黑色”,at=cobs10$gdd,标签=cobs10$day)

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


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

我不知道为什么这些图像不会立即显示,但如果你在新选项卡中打开它们,你可以看到它们。我跟你说,但看起来很奇怪。记号标签出现了问题,108在300之后,等等。好了,@Greg,我几乎已经弄明白了,但是我想减少x轴上显示的记号的数量。由于at>和labels>参数被占用,我不确定如何更改记号的数量。使用xaxp>只需写下我已有的内容。@Nazar,只需将较短的向量传递给
处的
标签
,这些标签只包含你想要的记号位置。很抱歉,我的密度太大,但这对我来说不起作用。如果我使用数据帧之外的任何向量,它们就不能正确匹配,或者不能跨越整个轴。如果你有时间,你能给我一个代码的例子吗?@Nazer,你能提供数据或类似的数据吗?
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)