Поиск ограничивающей рамки построенного текста
Я хотел бы дрожать текст на сюжете, чтобы избежать переборки. Для этого я предполагаю, что мне нужен ограничивающий прямоугольник вокруг текстового компонента. Есть ли способ получить это?
Например, в базовой графике:
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)
Ответы
Ответ 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}
"Кривые метки, клавиши и интерактивные точки и кривые"