2012-11-26 11 views
14

Sono nuovo per la trama in R quindi chiedo il tuo aiuto. Dì che ho la seguente matrice.Come faccio a tracciare quanto segue in R?

mat1 <- matrix(seq(1:6), 3) 
dimnames(mat1)[[2]] <- c("x", "y") 
dimnames(mat1)[[1]] <- c("a", "b", "c") 
mat1 
    x y 
a 1 4 
b 2 5 
c 3 6 

voglio tracciare questo, in cui l'asse x contiene ciascuna RowName (a, b, c) e l'asse y è il valore di ogni RowName (a = 1 e 4, b = 2 e 5, c = 3 e 6). Qualsiasi aiuto sarebbe apprezzato!

|  o 
| o x 
| o x 
| x 
|_______ 
    a b c 
+4

BTW, buon lavoro a leggere i link che vi e riscrivere la tua domanda in una forma molto migliore dato. Come puoi vedere di seguito dalle risposte qui sotto e dai tuoi upvotes, ha pagato i dividendi! :) – joran

+0

Prenderò il blocco :) Grazie per la guida. – Stephen

risposta

12

Ecco un modo grafica utilizzando di base:

plot(c(1,3),range(mat1),type = "n",xaxt ="n") 
points(1:3,mat1[,2]) 
points(1:3,mat1[,1],pch = "x") 
axis(1,at = 1:3,labels = rownames(mat1)) 

enter image description here

modificato per includere il simbolo diverso tracciato

+0

Esiste un modo per rendere verticali le etichette dell'asse x? – Stephen

+0

@ user1854603 Intendi le etichette dell'asse y? Altrimenti sono sicuro di cosa intendi. – joran

+1

@ user1854603 Giocare con l'argomento 'las', in questo modo:' plot (1: 3, las = 1); trama (1: 3, las = 2) 'e così via fino a' las = 4'. (FWIW, 'axis()' accetta anche un argomento 'las'.) –

10

matplot() è stato progettato per i dati in proprio questo formato:

matplot(y = mat1, pch = c(4,1), col = "black", xaxt ="n", 
     xlab = "x-axis", ylab = "y-axis") 
axis(1, at = 1:nrow(mat1), labels = rownames(mat1))    ## Thanks, Joran 

enter image description here

+2

... e puoi fare la stessa cosa che ho fatto con 'xaxt' e' axis' per etichettare l'asse x con le lettere. – joran

+0

@joran - Buono. L'ho aggiunto e una punta di cappello. –

+0

Quindi qualcosa come 'matplot (mat1, xaxt = 'n'); axis (1, at = 1: nrow (mat1), labels = rownames (mat1)); ' – user295691

3

si potesse fare in grafica di base, ma se avete intenzione di utilizzare R per molto più di questo penso che vale la pena di conoscere il pacchetto ggplot2. Notare che ggplot2 accetta solo frame di dati, ma in questo caso è spesso più utile mantenere i dati in frame di dati anziché in matrici.

d <- as.data.frame(mat1) #convert to a data frame 
d$cat <- rownames(d) #add the 'cat' column 
dm <- melt(d, id.vars) 
dm #look at dm to get an idea of what melt is doing 

require(ggplot2) 
ggplot(dm, aes(x=cat, y=value, shape=variable)) #define the data the plot will use, and the 'aesthetics' (i.e., how the data are mapped to visible space) 
    + geom_point() #represent the data with points 

enter image description here

6

E, infine, una soluzione reticolo

library(lattice) 
dfmat <- as.data.frame(mat1) 
xyplot(x + y ~ factor(rownames(dfmat)), data=dfmat, pch=c(4,1), cex=2) 

enter image description here

+0

+1 per il vecchio reticolo trascurato di scarsa qualità - che trovo ancora il miglior strumento di esplorazione dei dati per i grafici. –

+0

@ AriB.Friedman - Per quanto riguarda la mia formazione personale, che cosa ha il reticolo su ggplot come strumento di esplorazione dei dati? –

+1

@DrewSteen Trovo che la sintassi sia un po 'più intuitiva per affettare e tagliare i dati. 'ggplot' ha' qplot', ma trovo ancora le funzioni reticolari più veloci per aggiungere raggruppamento per colore e raggruppamento per traliccio. Anche le scandole sono brillanti: 'dfmat <- data.frame (x = seq (18), y = seq (18), z = rep (seq (3), 6), a = runif (18)); xyplot (x + y ~ factor (z) | equal.count (a, 3), data = dfmat) ' –

Problemi correlati