Подтвердить что ты не робот

Поиск ограничивающей рамки построенного текста

Я хотел бы дрожать текст на сюжете, чтобы избежать переборки. Для этого я предполагаю, что мне нужен ограничивающий прямоугольник вокруг текстового компонента. Есть ли способ получить это?

Например, в базовой графике:

plot.new()
text(.5,.5,"word")
text(.6,.5,"word") #does this overlap?

В сетке есть способ удалить перекрывающийся текст, но я не могу найти способ получить доступ к коду, который показывает, произошло ли перекрытие.

grid.text(c("word","other word"),c(.5,.6),c(.5,.5),check=T)
4b9b3361

Ответ 1

Возможно, функции strwidth и strheight могут помочь здесь

stroverlap <- function(x1,y1,s1, x2,y2,s2) {
  sh1 <- strheight(s1)
  sw1 <- strwidth(s1)
  sh2 <- strheight(s2)
  sw2 <- strwidth(s2)

  overlap <- FALSE
  if (x1<x2) 
    overlap <- x1 + sw1 > x2
  else
    overlap <- x2 + sw2 > x1

  if (y1<y2)
    overlap <- overlap && (y1 +sh1>y2)
  else
    overlap <- overlap && (y2+sh2>y1)

  return(overlap)
}
stroverlap(.5,.5,"word", .6,.5, "word")

Ответ 2

Пакет maptools имеет функцию под названием pointLabel.

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

Ответ 3

Если вы используете базовую графику, это будет тигмофоб {plotrix}

"Найдите направление от ближайшей точки"

Используя решетку, Харрелл предложил:

labcurve {Hmisc}

"Кривые метки, клавиши и интерактивные точки и кривые"