格式化persp3d图

Sta*_*ian 10 plot r colors

我有以下3d图:

RO

使用我的数据,我使用以下代码创建它:

library(rugarch)
library(rgl)
library(fGarch)

fd <- as.data.frame(modelfit, which = 'density')
color <- rgb(85, 141, 85, maxColorValue=255)

x <- seq(-0.2, 0.2, length=100)
y <-c(1:2318)

f <- function(s, t) {
 dged(s,mean=fd[t,'Mu'],sd=fd[t,'Sigma'],nu=fd[t,'Shape'])

}

z <- outer(x, y, f)
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color,
      ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE)
Run Code Online (Sandbox Code Playgroud)

如何根据z值获得着色?我看了看不同的解决方案,例如这一个,但我不能创建依赖于在这种情况下z值着色.根据这个线程的解决方案如下:

nrz <- nrow(z)
ncz <- ncol(z)
jet.colors <- colorRampPalette( c("#ffcccc", "#cc0000") ) 
# Generate the desired number of colors from this palette
nbcol <- 100
color <- jet.colors(nbcol)

# Compute the z-value at the facet centres
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
# Recode facet z-values into color indices
facetcol <- cut(zfacet, nbcol)

  persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[facetcol],
          ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE)
Run Code Online (Sandbox Code Playgroud)

但这并没有给出好的结果,因为它没有适当的颜色.我希望我的表面的尖峰是例如红色而低值是例如蓝色的具有良好的平滑过渡,但是这种颜色是切片,所以取决于时间?所以极端大的尖峰应该用红色的尖峰着色,底部的值应该用绿色标记.我怎么能得到这个?

编辑:我找到了我之前关于轴上日期的问题的解决方案,唯一的问题是依赖于z值的适当着色.

Ric*_*mos 22

试试这个:

nbcol = 100
color = rev(rainbow(nbcol, start = 0/6, end = 4/6))
zcol  = cut(z, nbcol)
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol],
        ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE)
Run Code Online (Sandbox Code Playgroud)

剧情

如果你想要着色是时间(所以尖峰总是红色)你可以设置每个时间片的着色:

mycut = function(x, breaks) as.numeric(cut(x=x, breaks=breaks)) # to combine different factors
zcol2 = as.numeric(apply(z,2, mycut, breaks=nbcol)) 
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol2],
        ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE)
Run Code Online (Sandbox Code Playgroud)

theplot2

您已经知道如何正确编辑轴.


42-*_*42- 6

要断言对轴的控制,您需要axes=FALSEpersp3d调用中设置(如昨天所说),然后使用带有您选择的参数的axes3daxis3d函数.要指定x轴,其值显示在较低的yz-框段,请使用edge= 'x--'.要使用rownames标记y轴,请使用'labels'和'at'参数:

plot3d ( ..., axes=FALSE, ...)
# repositions x axis and draws default z axis
axes3d(c('x--','z'))  
# Use custom labels
axis3d(edge= 'y+-', at =seq(500,2000,by=500), 
                    labels = rownames(fd)[seq(500,2000,by=500)] )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(注意:为了正确地玩这个SO游戏,你需要对那些提供帮助的人表示赞赏.这与昨天的问题没什么不同,我看不到对那里有用的贡献的积极回应.我想知道是否有人变得不感兴趣.)

  • 我的缩放不是"明显错误"(因为从未指定过期望的轴注释),但是你的回答清楚地证实了我在进一步努力中没有什么意义. (5认同)