2013-09-27 19 views
5

Jednym z możliwych pakietów dla interaktywnych wykresów 3D jest rgl. Chciałbym zbudować trójwymiarowy wykres rozrzutu z kodowaniem kolorami według pewnej zmiennej czynnikowej. Trójwymiarowy wykres rozrzutu dla wynikowych obciążeń z analizy plsr.Dodawanie legendy do wykresu scatter3d

Uzyskany wykres wygląda

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

W przykład dane są podane w tabeli:

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

lub mogą być wytwarzane:

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) 

uzyskanego wykresu ma sa mi styl, ale jest znacznie prostsze, ponieważ istnieją tylko dwa poziomy zmiennej „klasa”: „globalne” i „lokalne”

enter image description here

Pytanie jest: Czy jest jakakolwiek możliwość, aby dodać legendę wewnątrz RGL a może do tej fabuły można dołączyć jakąś niezależną legendę? Z góry dziękujemy za pomoc!

Odpowiedź brzmi:

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) 

Działka z etykiet według klas: enter image description here

+0

Należy dodać kod i jeśli to możliwe dane (rzeczywistej lub gotowych) z pytaniem, tak aby dokonać [minimalna repr nieprzyzwoity przykład] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – SlowLearner

+0

Ten nowy kod zgłasza błąd: "Błąd w complete.cases (x, y, z): ...". P –

+0

Naprawiono ten błąd. – Boddha

Odpowiedz

1

To nie plot3d obraz (chyba może masz inny pakiet załadowany), ale wygląda jak scatter3d renderowanie wykonane za pomocą funkcji scatter3d z pakietu car przez Johna Foxa:

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

Funkcja scatter3d zależy od funkcji rgl, ale ma wiele opcji dostosowywania. Państwo nie oferowało kod do zbudowania „Legend”, więc bawił się na przykład oferowany w 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

Z nowych danych Jest to odpowiedź na wniosek o tekście oraz punkty:

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

tak, to rzeczywiście scatter3d, naprawił to. Cóż, wygląda ładnie, ale dziwnie i niezbyt pouczająco. sprawdź tekst. i muszę mieć w legendzie kolorowe etykiety, odpowiadające kolorowym etykietom punktów danych. – Boddha

+0

Nie powinno być zbyt trudno tworzyć punkty i tekst w uporządkowany sposób, jak pokazano. Musisz opisać, co jest pożądane w szczegółach. –

+0

teraz to jest to, podam wynik powyżej. Dziękuję Ci! – Boddha

Powiązane problemy