2011-06-04 9 views
13

Me gustaría poner el texto en una trama para no sobrerrollar. Para hacerlo, supongo que necesito un cuadro delimitador alrededor del componente de texto. ¿Hay alguna forma de obtener esto?buscando el cuadro delimitador de texto trazado

Por ejemplo, en los gráficos de base:

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

En la rejilla hay una manera de colocar texto se superponen, pero me parece que no puede encontrar la manera de acceder al código que se da cuenta de si se ha producido superposición .

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

Respuesta

6

Tal vez los strwidth y strheight funciones pueden ayudar aquí

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, quizás casi perfecto. No obtiene la cola de 'p' minúscula correcta. –

+0

Esto supone que las coordenadas se encuentran en la esquina inferior izquierda de cada texto. ¿Es esto cierto para 'text()' en R? o está ubicado en el medio del texto? ¿Esto todavía funcionará si esto último es cierto? – useR

1

Si estaba utilizando gráficos de base sería thigmophobe {plotrix}

"Encontrar el sentido de alejamiento del punto más cercano"

El uso de celosía, Harrell ha ofrecido:

labcurve {Hmisc}

"Curvas de etiquetas, crear claves y dibujar puntos y curvas de forma interactiva"

+0

No veo cómo se puede utilizar cualquiera de estos para averiguar si dos textos se superponen. –

+0

No pueden, pero generalmente son herramientas útiles para hacer este tipo de cosas. No responde directamente su pregunta, pero posiblemente sea útil para otras personas que estén navegando por aquí en el futuro. 'labcurve' en particular tiene una cierta maquinaria para trazar etiquetas mientras que evita sobrerrollar –

2

paquete maptools tiene una función llamada pointLabel.

rutinas de optimización de uso para encontrar buenos lugares para etiquetas de puntos sin solapamientos.

Cuestiones relacionadas