найти ограничивающий прямоугольник - PullRequest
13 голосов
/ 04 июня 2011

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

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

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)

Ответы [ 3 ]

6 голосов
/ 04 июня 2011

Может быть, здесь могут помочь функции 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 голосов
/ 04 июня 2011

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

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

1 голос
/ 04 июня 2011

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

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

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

labcurve {Hmisc}

«Помечать кривые, создавать ключи и интерактивно рисовать точки и кривые»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...