首页 文章

只有值为“零”的标签不会以Plot()中的刻度为中心

提问于
浏览
1

我在R中使用正常的 plot() ,并使用漂亮函数执行标签和滴答以获得更大的灵活性(标记...) .

但事实上,值"zero"的标签没有在相应的刻度线周围正确对齐(居中),而其他所有标签看起来都很正常 . (见下面链接的截图 . )

  • 只有当我在格式(...)中使用"scientific=FALSE"时才会发生

  • 看起来是正确的,如果我使用"scientific=TRUE"

看来,零与右边对齐,而不是居中,R相信“零”与其他大数字(例如“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)

截图:

enter image description here

enter image description here

如果没有使用科学模式,任何建议如何“居中”“零”?

不可能使用“作为文本插入”或类似的手动解决方案,因为绘图是在循环内部创建的,有时只会出现零,但总是错误对齐 .

非常感谢!

3 回答

  • 2

    轴标签是字符串 . 检查当前的 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)
    

    enter image description here

  • 0

    FINAL SOLUTION:

    介绍......

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

    ......“labels_y < - ...”和“axis(...”之间的诀窍!

  • 1

    只需使用 axis(2, at = ticks_y-50000, labels = labels_y) . 如果您想自动化,可以使用标准杆("usr")根据范围进行移动 .

相关问题