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