2011-06-04 2 views
13

Je voudrais scinder le texte sur un tracé de manière à éviter le surplaqué. Pour ce faire, je suppose que j'ai besoin d'une boîte englobante autour du composant de texte. Y a-t-il un moyen d'obtenir ceci?trouver la boîte englobante du texte tracé

Par exemple, dans les graphiques de base:

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

Dans la grille, il est un moyen de déposer de texte qui se chevauchent, mais je ne peux pas sembler trouver un moyen d'accéder au code qui figure si chevauchement a eu lieu .

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

Répondre

6

Peut-être que les strwidth et strheight fonctions peuvent aider ici

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

bien, peut-être presque parfait. Il n'obtient pas la queue de 'p' minuscule correcte. –

+0

Cela suppose que les coordonnées sont situées dans le coin inférieur gauche de chaque texte. Est-ce vrai pour 'text()' dans R? ou est-il réellement situé au milieu du texte? Cela fonctionnera-t-il encore si ce dernier est vrai? – useR

1

Si vous utilisez graphiques de base, il serait thigmophobe {PLOTRIX}

"Trouver la direction loin du point le plus proche"

En utilisant treillis, Harrell a offert:

labcurve {Hmisc}

"Marque des courbes, créer des clés et dessiner de manière interactive des points et des courbes"

+0

Je ne vois pas comment l'un ou l'autre peut être utilisé pour déterminer si deux morceaux de texte se chevauchent. –

+0

Ils ne peuvent pas, mais ils sont généralement des outils utiles pour faire ce genre de chose. Pas directement répondre à votre question, mais peut-être utile pour d'autres personnes qui naviguent ici à l'avenir. 'labcurve' en particulier a quelques machines pour tracer des étiquettes tout en évitant de trop recouvrir –

2

Package maptools a une fonction appelée pointLabel.

Utilisez des routines d'optimisation pour trouver de bons endroits pour étiquettes de points sans chevauchements.

Questions connexes