2010-02-11 4 views
5

Tengo dos vectores de números de igual longitud. ¿Cómo trazo el primer vector mientras uso el elemento correspondiente en el segundo vector como el carácter de impresión? (Fondo: ordené la primera columna y la segunda columna contiene los índices originales. Quiero usar los índices como el carácter imprimible para poder ver qué puntos de datos son valores atípicos, ya que cada número representa una ejecución de datos).R - cómo usar el contenido de un vector como el símbolo en un diagrama?

> x 
$x 
[1] 25 29 30 34 38 572 700 733 870 879 899 934 982 1054 1135 1258 
[17] 1315 1491 1685 1700 2069 2131 2284 3498 3506 4467 4656 5633 6642 8348 

$ix 
[1] 23 3 18 30 13 8 4 14 11 17 12 29 9 15 19 16 7 1 20 2 6 28 21 10 5 22 24 26 
[29] 25 27 

primer vector es x $ x, segundo vector es x $ ix (resultados de llamar a un género con index.return = VERDADERO) parcela

He tratado (x $ x, pch = str (x $ ix)) pero eso trata x $ ix numéricamente. Si esto fuera Python, haría algo como strings = [str (x) para x en x $ ix]. pero esto es R y he olvidado la mayor parte de lo que solía saber.

He descubierto que se puede hacer as.character (x $ ix) con el fin de obtener las cadenas,

> as.character(x$ix) 
[1] "23" "3" "18" "30" "13" "8" "4" "14" "11" "17" "12" "29" "9" "15" "19" "16" 
[17] "7" "1" "20" "2" "6" "28" "21" "10" "5" "22" "24" "26" "25" "27" 

y puede utilizar esto como la entrada a PCH. Pero solo se usa el primer caracter (y de acuerdo con los documentos, eso es normal).

Sé que hay una manera de hacerlo; Lo hice en la universidad. Pero no puedo recordar cómo lo hice por mi vida.

gráfico sin etiquetas: alt text http://i47.tinypic.com/2aep88.png

Gráfico con las etiquetas, pero incorrecta: alt text http://i50.tinypic.com/2cicxtu.png

Respuesta

9

esto debería funcionar:

x = 1:4 
y = x 
plot(x, y, ann=F, axis=F, col="blue", pch=16) 
text(x, y, labels=c("1st", "2nd", "3rd", "4th"), col="red", pos=c(3,4,4,1), offset=0.6) 

Sólo convertir su vector no los datos (la que contiene la etiquetas) a un vector de caracteres: labels = as.character (label_vector)

y luego sustituya esto por el tercer argumento en la línea 4 anterior.

La función 'Texto' es bastante versátil debido a los diversos argumentos que puede pasar; por ejemplo, (como en el ejemplo anterior) puede establecer el texto en un color diferente al de los puntos utilizando "col"; También puede especificar la posición (relativa al punto de datos anotado por una etiqueta de texto dada) para cada etiqueta de texto por separado. Suele ser útil para mantener las etiquetas de texto, por ejemplo, solapando uno de los ejes, que es lo que sucedió la primera vez que ejecuté este ejemplo sin establecer 'pos'. Entonces al configurar 'pos' (como c (3, 4, 4, 1)) configuro la posición de las etiquetas de texto como "arriba", "derecha", "derecha" y "abajo" - moviendo los primeros datos apunte hacia arriba para que no golpee el eje x inferior, y moviendo el cuarto abajo para que no golpee el eje x superior. Además, usando 'offset' (que tiene un valor predeterminado de 0.5) puede especificar la magnitud del ajuste de posición.

+0

Ahaaaa, me sabía que había una función para dibujar cadenas. Gracias por tu pronta respuesta. Tampoco había sabido nada sobre el argumento de la pos, que es extremadamente útil. ¡Gracias de nuevo! – I82Much

+0

no hay problema - me alegra saber que lo encontró útil. – doug

3

Aquí es una manera de hacer esto utilizando la ggplot2 paquete:

library(ggplot2) 
x <- rnorm(10) 
y <- rnorm(10) 
labs <- 1:10 
ggplot()+geom_text(aes(x=x,y=y,label=labs)) 

enter image description here

0

Aquí hay una solución muy básica utilizando lattice:

dat <- data.frame(x = rnorm(10), y = rnorm(10), 
        labs = as.character(1:10)) 
xyplot(y~x,data = dat,panel = function(x,labs){ 
           panel.text(x,y,labels = labs)}, 
     labs = dat$labs) 

enter image description here

Cuestiones relacionadas