2011-06-04 166 views
13

我想抖动剧情上的文本以避免出现重叠图。为此,我假设我需要围绕文本组件的边界框。有没有办法得到这个?找到绘制文本的边界框

例如,在基础图形:

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) 

回答

6

也许strwidthstrheight功能可以帮助这里

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

的过度绘制,可能接近完美。它没有得到正确的小写字母“p”的尾部。 – 2011-06-04 20:07:06

+0

这假定坐标位于每个文本的左下角。这对R中的text()是否正确?还是它实际上位于文本的中间?如果后者是真的,这仍然有效吗? – useR 2016-12-13 22:54:35

1

如果您正在使用的基础图形这将是thigmophobe {plotrix}

“寻找方向的最近点离”

使用点阵,哈勒尔提供了:

labcurve {Hmisc}

“Label Curves,Make Keys,and Interactively Draw Points and Curves”

+0

我没有看到这些如何可以用来弄清楚,如果两段文字重叠。 – 2011-06-04 02:50:09

+0

他们不能,但他们通常是做这类事情的有用工具。不直接回答你的问题,但可能适用于未来浏览此处的其他人。特别是'labcurve'有一些绘制标签的机器,同时避免出现 – 2011-06-04 19:14:43

2

maptools有一个称为pointLabel功能。

使用优化程序找到点标签良好 位置,而 重叠。