R 语言在简单图(不是 ggplot)的轴上垂直对齐下标和上标?

R language vertically aligned subscripts and superscript in axis of simple plot (not ggplot)?

抱歉这个愚蠢的问题,我用 google 搜索了一段时间也无法解决。我知道我可以用这样一种简单的方式在轴标签中生成带有上标的图:

dta <- data.frame(LON = runif(20, -10, 10), LAT = runif(20, -10, 10))
plot(dta, xlim = c(-10,10), ylim = c(-10,10), axes = F)
axis(1, at = seq(-10,10,2), labels = paste0(abs(seq(-10,10,2)), "º"))
axis(2, at = seq(-10,10,2), labels = paste0(abs(seq(-10,10,2)), "º"), las = 2)

然而,我真正需要的是这样的东西:

我用 Photoshop 制作了这个,但我反复制作了大量的图,而且这个解决方案并不实惠。请注意以下事实:(1) 上标和下标都是垂直对齐的,(2) 下标是斜体的,(3) 下标是可变的。我试图通过使用如下命令“覆盖”轴来解决问题:

mtext(c(rep("S",6), "",rep("N",6)), side = 2, line = -0.2, outer = FALSE, 
          at = seq(-10,10,2)-0.4, font = 3, cex = 0.3, las = 2)

然而,这很痛苦……每次我决定更改绘图的分辨率或大小时,因为它们的制作速度很慢,而且我必须做几次直到在“行”中获得足够的数量.任何人都可以给我一些启发来解决这个问题吗?

vec <- seq(-10,10,2)
plot(dta, xlim = c(-10,10), ylim = c(-10,10), axes = F)
axis(1, at=vec, labels=as.expression(mapply(function(num,sub) bquote(.(num)[italic(.(sub))]^degree), abs(vec), ifelse(vec > 0, "E", ifelse(vec < 0, "W", "")))))
axis(2, at=vec, labels=as.expression(mapply(function(num,sub) bquote(.(num)[italic(.(sub))]^degree), abs(vec), ifelse(vec > 0, "N", ifelse(vec < 0, "S", "")))), las=2)