Как сделать трехмерный линейный график в R (график водопада)

Я хочу создать каскадный график в R (XYYY) из моих данных.

Пока я использую этот код:

load("myData.RData")
ls()
dim(data)

##matrix to xyz coords
library(reshape2)
newData <- melt(data, id="Group.1")
dim(newData)
head(newData)
tail(newData)
newDataO <- newData[c(2,1,3)]
head(newDataO)

##color scale for z axis
myColorRamp <- function(colors, values) {
v <- (values - min(values))/diff(range(values))
x <- colorRamp(colors)(v)
rgb(x[,1], x[,2], x[,3], maxColorValue = 255)
}

cols <- myColorRamp(c("darkblue","yellow","darkorange","red","darkred"),newDataO$value)

##3D scatter
library(rgl)
plot3d(newDataO$variable, newDataO$Group.1, newDataO$value, xlab="", ylab="", zlab="",      type="p", col=cols, box=FALSE, axes=FALSE)

rgl.postscript("persptrial_060514.eps","eps")

чтобы получить этот сюжет:

https://dl.dropboxusercontent.com/u/14906265/persptrial_060514.jpg

Я также использовал эту опцию в 2D с многоугольником, но результат не показывает должным образом дифференциальный эффект между обоими графиками (левый и правый).

Я не знаю, сможет ли что-то вроде persp3d выполнить эту работу, но я недостаточно знаком с написанием кода, чтобы добиться этого. Любая помощь будет очень признательна.


person JLA    schedule 06.05.2014    source источник
comment
Это не совсем каскадный график, но попробуйте Surface3d() в пакете rgl. Он дает графики, аналогичные menne-biomed.de/swallow/jswallow3d.html. , но гораздо ярче.   -  person Dieter Menne    schedule 06.05.2014
comment
@Dieter Menne Большое спасибо за ваш вклад. Вы указали мне правильный путь: dl.dropboxusercontent.com/u/14906265/   -  person JLA    schedule 07.05.2014
comment
Выглядит неплохо. Чтобы избежать гребенчатой ​​структуры, я иногда немного сглаживаю-интерполирую, но в вашем случае это также можно считать мошенничеством.   -  person Dieter Menne    schedule 07.05.2014


Ответы (1)


Мне кажется, что самый простой способ сделать каскадный график в R — добавить все строки вручную в цикле.

library(rgl)

# Function to plot
f <- function(x, y) sin(10 * x * y) * cos(4 * y^3) + x

nx <- 30
ny <- 100
x <- seq(0, 1, length = nx)
y <- seq(0, 1, length = ny)
z <- outer(x, y, FUN = f)

# Plot function and add lines manually
surface3d(x, y, z, alpha = 0.4)
axes3d()
for (i in 1:nx) lines3d(x[i], y, z[i, ], col = 'white', lwd = 2)

Сюжет с водопадом

person Lars Lau Raket    schedule 14.07.2015