只有值 "zero" 的标签未以其在 Plot() 中的刻度为中心

Only label for value "zero" is not centered to its tick in Plot()

我在 R 中使用普通的 plot(),并使用漂亮的函数做标签和刻度以获得更大的灵活性(标记...)。

但碰巧值 "zero" 的标签没有正确对齐(居中)在相应的刻度周围,而其他所有标签看起来都正常。 (查看下面链接的屏幕截图。

似乎零向右对齐,而不是居中,并且 R 认为 "zero" 与其他大数字(例如“100 000”)具有相同数量的数字并将“000 000”居中对齐,而不是仅居中对齐“0”。

有什么容易的事吗?

最小工作示例:

plot(x=NULL, y=NULL, xlab="xlab", ylab="ylab"
      , xlim=range(2007:2014), ylim=range(0:500000), axes=FALSE)
      box()
      ticks_x <- pretty(2007:2014,n=6)
      ticks_y <- pretty(0:500000,n=8)

      labels_x <- format(ticks_x)
      labels_y <- format(ticks_y , big.mark = " " , decimal.mark=",", scientific=FALSE)

      axis(1, at = ticks_x, labels = labels_x)
      axis(2, at = ticks_y, labels = labels_y)

截图:

如果不使用科学模式,有什么关于如何 "centre" "zero" 的建议吗?

用 "inserting as text" 或类似的手动解决方案是不可能的,因为绘图是在循环内创建的,只有有时会出现零,但它总是错误对齐。

非常感谢!

只需使用axis(2, at = ticks_y-50000, labels = labels_y)。如果你喜欢自动化,你可以使用par("usr")根据范围移动。

轴标签是字符串。查看您当前的 labels_y:

#[1] "      0" " 50 000" "100 000" "150 000" "200 000" "250 000" "300 000"
#[8] "350 000" "400 000" "450 000" "500 000"

你得到了不需要的对齐方式,仅仅是因为 0 的标签是 " 0"。该问题可以通过以下方式解决:

labels_y[1] <- "   0   "
## or simply: labels_y[1] <- "0"
axis(2, at = ticks_y, labels = labels_y)

最终解决方案:

介绍...

[...] 
    labels_y <- format(....
if(as.numeric(ticks_y[1]) == "0"){labels_y[1] <- "0"}
    axis(2,.... 
[...]

... 在 "labels_y <- ..." 和 "axis(..." 之间就可以了!