3d сюжет в R - патч - PullRequest
       85

3d сюжет в R - патч

4 голосов
/ 27 сентября 2011

У меня есть следующие данные во фрейме данных:

**x** in (0,1)
**y** in [0,1]
**z** in [0,1]

Например:

X,Y,Z
0.1, 0.2, 0.56
0.1, 0.3, 0.57
...

Я бы хотел нарисовать их на графике такого типа: A 3d plot

Я пробовал R, но все, что я мог получить, это не очень причудливая трехмерная диаграмма рассеяния . Я также читал о решетчатом 3D каркасе , но я не мог обойти его.

Что я должен сделать, чтобы получить каркас, похожий на Matlab, в R? Какие преобразования данных участвуют?

Это пример кода из документации:

x <- seq(-pi, pi, len = 20)
y <- seq(-pi, pi, len = 20)
g <- expand.grid(x = x, y = y)
g$z <- sin(sqrt(g$x^2 + g$y^2))
wireframe(z ~ x * y, g, drape = TRUE,
aspect = c(3,1), colorkey = TRUE)

Я не нахожу это особенно ясным.

EDIT : функция persp3d работает нормально, и мне удалось сгенерировать трехмерный график с одним цветом. Как установить цветовую шкалу относительно значения z?

Спасибо за любые подсказки, Mulone

1 Ответ

11 голосов
/ 27 сентября 2011

Используйте outer для создания значений z, а затем используйте persp для построения графика:

z <- outer(x,y, function(x,y) sin(sqrt(x^2+y^2)))
persp(x,y,z)

persp

Существуют параметры для окраски и настройки угла обзора,см ?persp.См. Четвертый пример раскраски в стиле Matlab.

Для интерактивного графика рассмотрите возможность использования persp3d в пакете rgl:

require(rgl)
persp3d(x,y,z,col="blue")

Редактировать

Чтобы добавить цвет, есть небольшое отличие от метода в persp, поскольку цвет относится к вершине, а не к центру фасета, но это облегчает его.

jet.colors <- colorRampPalette( c("blue", "green") ) 
pal <- jet.colors(100)
col.ind <- cut(z,100) # colour indices of each point
persp3d(x,y,z,col=pal[col.ind])

persp3d

В файле справки рекомендуется добавить параметр smooth=FALSE, но это зависит от личных предпочтений.

...