2013-09-27 14 views
5

Uno dei possibili pacchetti per grafici 3D interattivi è rgl. Quello che mi piacerebbe fare è creare uno scatterplot 3D con codifica a colori in base a una variabile fattore. Il grafico a dispersione dimensionale 3D è per i carichi risultanti dall'analisi di plsr.Aggiunta di una legenda al grafico scatter3d

Il grafico risultante assomiglia

3D scatterplot of PLS loadings with color coding according to the groups of variables

I esempio dati è dato in una tabella:

> loadings 

     |  Comp 1   |  Comp 2   | Comp 3   | Class 
-------------------------------------------------------------------------------------------      
TEMP | -0.0607044182964255 | "0.0437618450165671"  |"0.045124991801441" | "global" 
MW | "-0.13414890573833" | "-0.0970537799069731" |0.263043734662182" | "local" 
DM |"-0.183751529577861" | "-0.102703237685933" |"0.0640549385564205" | "global" 
CHG |"-0.0558781715833019"| "0.125155347350922"  |"-0.119258450107321" | "local" 

o può essere generato:

loadings <- data.frame(Comp1 = c(1.2, 3.4, 5.6, 13.1), Comp2 = c(4.3, 1.2, 7.7, 9.8), 
         Comp3 = c(1.2,6.9,15.6,15.0), 
         row.names = c("TEMP", "MW", "DM", "CHG"), 
         Class = c("global", "local", "global", "local")) 
scatter3d(x=loadings[[1]], y=loadings[[2]], z=loadings[[3]], 
      point.col = as.numeric(as.factor(loadings[,4])), size = 10) 

trama Ottenuto ha il sa Mi stile, ma è molto più semplice in quanto vi sono solo due livelli di "Class" variabile: 'globale' e 'locale'

enter image description here

domanda è: E 'la possibilità di aggiungere leggenda all'interno RGL o forse qualche leggenda indipendente può essere allegata alla trama? Grazie in anticipo per l'aiuto!

risposta è:

scatter3d(x=loadings[[1]], y=loadings[[2]], z=loadings[[3]], 
      point.col = as.numeric(as.factor(loadings[,4])), size = 10, type = 's') 
text3d(x=1.1, y=c(.9,1), z=1.1,levels(loadings[[4]]),col="black") 
points3d(x=1.2,y=c(.9,1),z=1.1, col=as.numeric(as.factor(loadings[,4])), size=5) 

La trama con le etichette in base alle classi: enter image description here

+0

Si prega di aggiungere il codice e se i dati possibili (reali o inventate) alla tua domanda in modo da fare una [repr minima esempio oducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – SlowLearner

+0

Questo nuovo codice genera un errore: "Errore in complete.cases (x, y, z): ...". P –

+0

risolto questo errore. – Boddha

risposta

1

Questo non è un'immagine plot3d (a meno che forse si dispone di un altro pacchetto caricato), ma si presenta come un scatter3d rendering costruito con la funzione scatter3d dal pacchetto car di John Fox:

require(rgl) 
    require(car) 
    scatter3d(x=loadings[[1]], y=loadings[[2]], z=loadings[[3]], 
      point.col = as.numeric(as.factor(loadings[,4])), size = 10) 

La funzione scatter3d dipende dalle funzioni geografiche, ma presenta alcune opzioni di personalizzazione. È offerto alcun codice per costruire una "leggenda", così ho giocato intorno con l'esempio offerto in RGL :: text3d:

text3d(1+ font/8, 1+cex/4, 1+famnum/8, text=paste(family, font), adj = 0.5, 
     color="blue", family=family, font=font, cex=cex) 

enter image description here

Con i nuovi dati Questo è in risposta alla richiesta per il testo e punti:

scatter3d(x=loadings[[1]], y=loadings[[2]], z=loadings[[3]], 
      point.col = as.numeric(as.factor(loadings[,4])), size = 10) 
text3d(x=1.1, y=c(.9,1,1.1), z=1.1, names(loadings) ,col="black") 
points3d(x=1.2,y=c(.9,1,1.1),z=1.1, col=as.numeric(as.factor(loadings[,4])), size=5) 

enter image description here

+0

sì, è davvero dispers3d, risolto. Bene, sembra carino, ma strano e non molto informativo. controlla il testo e ho bisogno di avere etichette a colori, corrispondenti alle etichette a colori dei punti dati, nella legenda. – Boddha

+0

Non dovrebbe essere troppo difficile tracciare punti e testo in modo strutturato come dimostrato. È necessario descrivere ciò che si desidera in dettaglio. –

+0

ora è così, metterò il risultato sopra. Grazie! – Boddha

Problemi correlati