Как переместить одну текстовую метку на графике без изменения x-y-координат? - PullRequest
1 голос
/ 17 марта 2019

Я хочу добавить метки стран (на самом деле десять) к 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, ...)

Я бы пришел к выводу, что по умолчанию pos равен NULL, поэтому я говорю pos=c(NULL, 4). Однако это не работает, как ожидалось; первая метка также перемещена. moveString перемещен правильно, но другой должен оставаться там, где он есть. Я перепробовал все доступные pos для stayString, но они не соответствуют исходной позиции. Я также попробовал 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")

enter image description here

Я скорее ищу такое корректирующее решение, потому что я не люблю менять координаты, поскольку они хорошо представляют центр каждой страны.

Как мне переместить moveString и удерживать stayString в положении без изменения координат x / y?

1 Ответ

1 голос
/ 17 марта 2019

Решение, которое приходит на ум, состоит в том, чтобы создать две функции и разбить каждую строку на основе того факта, хотите вы offset это или нет.

Мы можем использовать от text(), pos и offset, чтобы немного переместить текст.

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")

enter image description here

...