2013-09-27 4 views
5

Одним из возможных пакетов для интерактивных 3D-графиков является rgl. То, что я хотел бы сделать, - построить 3D-диаграмму рассеяния с цветовым кодированием в соответствии с некоторой факторной переменной. Трехмерная диаграмма рассеяния предназначена для получения нагрузок из анализа plsr.Добавление легенды в plot3d plot

Полученный график выглядит как

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

В пример данных приведен в таблице:

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

или могут быть получены:

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) 

, полученный график имеет мне стиль, но гораздо проще, так как есть только два уровня переменного «класс»: «глобальные» и «локальные»

enter image description here

Вопрос: ли какая-нибудь возможность добавить легенду в RGL или, может быть, какая-то независимая легенда может быть прикреплена к сюжету? Заранее благодарим за помощь!

Ответ:

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) 

Участок с этикетками по классам: enter image description here

+0

Пожалуйста, добавьте код и, если возможно, данные (либо реальные или выдуманные) на ваш вопрос таким образом, чтобы сделать [минимальный Repr (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – SlowLearner

+0

Этот новый код вызывает ошибку: «Ошибка в файлах complete.cases (x, y, z): ...». P –

+0

Исправлена ​​ошибка. – Boddha

ответ

1

Это не plot3d изображение (если возможно, у вас есть еще один пакет загружен), но выглядит как scatter3d рендеринг, построенный с помощью функции scatter3d от пакета car от 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) 

Функция scatter3d зависит от функций rgl, но имеет множество настроек. Вы не предложили код построить «легенду», так что я играл на примере предлагаемых в 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

С новыми данными это в ответ на просьбу о предоставлении текста и точки:

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

Да, это действительно рассеяно3d, исправлено. Ну, это выглядит красиво, но странно и не очень информативно. проверьте текст. и в легенде мне нужно иметь цветные метки, соответствующие цветовым ярлыкам точек данных. – Boddha

+0

Не должно быть слишком сложно очертить точки и текст структурированным образом, как показано. Вам нужно описать, что нужно подробно. –

+0

теперь он, я поставил результат выше. Спасибо! – Boddha

Смежные вопросы