2013-09-27 21 views
5

Etkileşimli 3D grafikler için olası paketlerden biri rgl'dir. Benim yapmak istediğim, bazı faktör değişkenlerine göre renk kodlaması ile 3D dağılım grafiğini oluşturmaktır. 3D boyutlu dağılım grafiği, plsr analizinden kaynaklanan yüklemeler içindir.Scatter3d çizimine bir gösterge eklenmesi

elde edilen arsa bakar

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

gibi bir tabloda verilmiştir örnek veriler:

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

veya oluşturulabilir:

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) 

elde edildi arsa sa Beni tarzı, ama değişken "Sınıf" sadece iki seviye olduğu gibi çok daha kolaydır: rgl içinde efsaneyi eklemek için herhangi bir olasılık mı:

enter image description here

Soru olduğu 'küresel' ve 'Yerel' ya da belki bağımsız bir efsane arsaya eklenebilir? Yardım için şimdiden teşekkür ederiz!

Cevap geçerli: sınıfına göre etiketlerle

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) 

arsa: Bir plot3d görüntü değil enter image description here

+0

kodu eklemek ve Lütfen sorunuza (gerçek veya uydurma ya) olası veriler [asgari repr kılacak şekilde olursa oducible örneği] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – SlowLearner

+0

Bu yeni kod bir hata veriyor: "complete.cases (x, y, z): ..." hatası. P –

+0

Bu hatayı düzeltildi. – Boddha

cevap

1

(belki başka bir paket yüklü olmadığı sürece), ancak bir scatter3d benziyor John Fox tarafından scatter3d işlevinden oluşturulan görüntü oluşturma:

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

scatter3d işlevi, ggl işlevlerine bağlıdır, ancak birkaç özelleştirme seçeneğine sahiptir. Bir "efsane" nun yapılmasına kod sunulan, bu yüzden rgl :: Text3D sunulan örnekle etrafında oynanan: Bu metin için isteğine yanıt olarak yeni veriler sayesinde

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

ve puan:

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

evet, gerçekten scatter3d, düzeltildi. Güzel görünüyor, ama garip ve çok bilgilendirici değil. metni kontrol et. ve efsanedeki veri noktalarının renk etiketlerine karşılık gelen renk etiketlerine ihtiyacım var. – Boddha

+0

Gösterildiği gibi yapılandırılmış bir şekilde noktaları ve metinleri çizmek çok zor olmamalıdır. İstediğiniz şeyi ayrıntılı olarak açıklamanız gerekir. –

+0

şimdi öyle, yukarıdaki sonucu koyacağım. Teşekkür ederim! – Boddha