高水準関数の作図後に低水準関数で作図したときの線の扱いをなんとかしたい

意味的にはこんな感じである。
plotで作図すると高水準関数といって、とりあえず作図されるが、その後に低水準関数と呼ばれる、例えばpointslineといった関数で後付でお絵描きができる。
自分がよくやるのはplotしたあとに、ある領域はこうである、みたいな色付けをpolygon関数でやるのだが、何も考えないでplotのあとにpolygonを行うとこんな感じになる。

d <- 0.5
plot(1, xlab="", ylab="")
box(lwd=10)
pa <- par()$usr
polygon(c(pa[1]+d, pa[2]-d, pa[2]-d, pa[1]+d), rep(pa[3:4], each=2), border=NA, col=grey(0.8))

f:id:MikuHatsune:20210107143612p:plain
box関数で枠の太さを水増ししているが、要はpolygonで作図した線がplotで定義されている枠線のちょうど真ん中を通るように設計されているので、polygonがレイヤーでいうところの最上位に来ていてこんな感じのなんか気持ち悪い感じになる。

これを解決してpolygonが下に来てplotの枠線が上に来るようにするには、それはそうするしかない。が、普通にboxで後付けするとplotで描かれる枠線とかぶって更に気持ち悪くなる。
というわけでplotするときに、不要なものやあとで付け足したいものは引数で描かないように設定する。

plot(1, xlab="", ylab="", frame=FALSE, xaxt="n", yaxt="n")
axis(1, lwd=0, lwd.ticks=1)
axis(2, lwd=0, lwd.ticks=1)
polygon(c(pa[1]+d, pa[2]-d, pa[2]-d, pa[1]+d), rep(pa[3:4], each=2), border=NA, col=grey(0.8))
box(lwd=10)

f:id:MikuHatsune:20210107143950p:plain