2010-02-11 11 views
5

Ho due vettori di numeri di uguale lunghezza. Come faccio a tracciare il primo vettore mentre utilizzo l'elemento corrispondente nel secondo vettore come carattere di stampa? (Contesto: ho ordinato la prima colonna e la seconda colonna contiene gli indici originali. Voglio utilizzare gli indici come carattere stampabile in modo da poter vedere quali dati sono valori anomali, poiché ogni numero rappresenta una serie di dati).R - come utilizzare i contenuti di un vettore come simbolo in un grafico?

> 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 

primo vettore è x $ x, secondo vettore è x $ ix (risultati della chiamata sorta con index.return = TRUE) trama

Ho provato (x $ x, PCH = str (x $ ix)) ma tratta x $ ix numericamente. Se questo fosse Python, farei qualcosa di simile a strings = [str (x) per x in x $ ix]. ma questo è R e ho dimenticato la maggior parte di quello che conoscevo.

ho scoperto che si può fare as.character (x $ ix) al fine di ottenere le stringhe,

> 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" 

e posso usare questo come l'ingresso a pch. Ma viene usato solo il primo carattere (e secondo i documenti, è normale).

So che c'è un modo per farlo; L'ho fatto al college. Ma non posso per la vita di me ricordare come l'ho fatto.

Grafico senza etichette: alt text http://i47.tinypic.com/2aep88.png

Grafico con le etichette, ma non corretto: alt text http://i50.tinypic.com/2cicxtu.png

risposta

9

questo dovrebbe funzionare:

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) 

Basta convertire il vettore non dati (quella che contiene la etichette) a un vettore di caratteri: etichette = as.character (label_vector)

e quindi sostituire questo per il terzo argomento nella riga 4 sopra.

La funzione "Testo" è abbastanza versatile a causa dei vari argomenti che è possibile inserire, ad esempio (come nell'esempio precedente) è possibile impostare il testo su un colore diverso rispetto ai punti dati utilizzando "col"; È inoltre possibile specificare la posizione (relativa al punto dati annotato da una determinata etichetta di testo) per ciascuna etichetta di testo separatamente. Questo è spesso utile per mantenere etichette di testo, ad esempio, sovrapponendo uno degli assi, che è quello che è successo la prima volta che ho eseguito questo esempio senza impostare 'pos'. Quindi impostando 'pos' (come c (3, 4, 4, 1)) ho impostato la posizione delle etichette di testo come "sopra", "destra", "destra" e "sotto" - spostando i primi dati puntare verso l'alto in modo da non colpire l'asse x inferiore e spostare il quarto verso il basso in modo che non colpisca l'asse x superiore. Inoltre, usando 'offset' (che ha un valore predefinito di 0.5) è possibile specificare l'entità della regolazione della posizione.

+0

Ahaaaa, ho sapeva che c'era una funzione disegnare stringhe. Grazie per la tua rapida risposta. Inoltre non sapevo nulla dell'argomento pos - che è estremamente utile. Grazie ancora! – I82Much

+0

nessun problema - felice di sapere che l'hai trovato utile. – doug

3

Ecco un modo per farlo utilizzando il pacchetto ggplot2:

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

Ecco una soluzione molto semplice utilizzando 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

Problemi correlati