【问题标题】:How to move a single text label in a plot w/o changing x-y-coordinates?如何在不改变 x-y 坐标的情况下在绘图中移动单个文本标签?
【发布时间】:2019-08-07 23:05:03
【问题描述】:

我想在rworldmap 中添加国家/地区标签(实际上是十个)。其中两个重叠,因为它们是毗邻的小州。我想将其中一个稍微移到一边,但将第一个保持在原位。

我认为我不需要在这里显示rworldmap 代码,因为我可以将问题分解为text 函数。

来自函数的参数默认值

text(x, y = NULL, labels = seq_along(x$x), adj = NULL,
     pos = NULL, offset = 0.5, vfont = NULL,
     cex = 1, col = NULL, font = NULL, ...)

我会得出结论,默认posNULL,所以我说pos=c(NULL, 4)。但是,这并没有按预期工作;第一个标签也被移动。 moveString 已正确移动,但另一个应留在原处。我已经为stayString 尝试了所有可用的pos,但它们与原始位置不对应。我也尝试了adj,但没有成功。

plot(0:3, type="n")
grid()
text(c(2, 2.2), rep(3, 2), c("stayString", "moveString"), 
     col="black")  # raw
text(c(2, 2.2), rep(2.5, 2), c("stayString", "moveString"),
     pos=c(NULL, 4), col="red")  # unexpected result

# other attempts
text(c(2, 2.2), rep(2, 2), c("stayString", "moveString"),
     pos=c(1, 4), col="green")
text(c(2, 2.2), rep(1.5, 2), c("stayString", "moveString"),
     adj=c(.5, 1), col="blue")
text(c(2, 2.2), rep(1, 2), c("stayString", "moveString"),
     pos=c(2, 4), col="purple")
text(c(2, 2.2), rep(.5, 2), c("stayString", "moveString"),
     pos=c(1, 4), adj=c(.5, 1), col="orange")

我宁愿寻找这样的调整解决方案,因为我不喜欢更改坐标,因为它们很好地代表了每个国家的中心。

如何在不更改x/y 坐标的情况下移动moveString 并保持stayString 就位?

【问题讨论】:

    标签: r plot label rworldmap


    【解决方案1】:

    想到的一个解决方案是创建两个函数,并根据您是否要offset它来拆分每个字符串。

    我们可以使用text()posoffset 来稍微移动文本。

    text_stay <- function(x, y, lab, ...) {
      text(x,y, labels=lab, ...)
    }
    
    text_move <- function(x,y,lab, p=4, off=2, ...) {
      text(x, y, labels=lab, pos=p, offset=off, ...)
    }
    

    例如:

    plot(0:3, type="n")
    grid()
    # split the text and use the appropriate wrapper function
    text_stay(rep(2, 3), 1:3, "stay", col="red")
    text_move(rep(2, 3), 1:3, "move", col = "blue")
    

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 2014-08-08
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      相关资源
      最近更新 更多