2011-06-04 88 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功能。

使用優化程序找到點標籤良好 位置,而 重疊。