在次要 y 轴上对齐网格 - 底图 R

Align grid in secundary y axis - base plot R

我一直在尝试显示具有两个不同 y 轴范围值的数据。 responsebarplot:

非常有帮助
# data 1
yy <- c(30,45,60,100,110,90,80,50,20,10,10,15)
name1 <- month.abb
xx <- barplot(yy, ylab = "", names.arg = name1,col="steelblue", ylim = c(0,120))

# data 2
par(new = T)
yy2 <- c(20,21,21,22,23,23.5,22,20,19,19,18,19)
plot(xx + 0.5, yy2, "l", ylim = c(18,24), lwd = 2,col="red", lty=1, 
     axes=F, xlim=c(min(xx), max(xx)+1))
points(xx + 0.5, yy2, pch = 18, cex = 1,col="red")
axis(4)
box()

# example grid
abline(h = 18)
### abline 18 through 23
abline(h = 24)

导致此输出

我想知道如何对齐 y 轴之间的网格。我想将辅助轴拉伸到盒子的顶部和底部可以做到,但我不知道如何进行拉伸。有什么建议吗?


编辑。 寻找一种放置图例的好方法,我发现 响应,我认为这非常简单。

默认情况下,plot 在绘图范围的所有边上额外增加 4%。 barplot 不这样做。这就是为什么你的两个轴不对齐的原因。您可以使用参数 yaxs="i" 关闭额外添加的 space。另外,我没有多次使用 abline,而是使用 grid 添加了水平线。将这些放在一起,我得到:

xx <- barplot(yy, ylab = "", names.arg = name1,col="steelblue", ylim = c(0,120))

# data 2
par(new = T)
yy2 <- c(20,21,21,22,23,23.5,22,20,19,19,18,19)
plot(xx + 0.5, yy2, "l", ylim = c(18,24), lwd = 2,col="red", lty=1, 
     axes=F, xlim=c(min(xx), max(xx)+1), yaxs="i")
points(xx + 0.5, yy2, pch = 18, cex = 1,col="red")
axis(4)
box()

grid(nx=1, ny=6, lty=1, col="black")