使用我的data创建了以下代码:
library(rugarch)
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)
persp(x, y, z, theta=50, phi=25, expand=0.75, col=color,
ticktype="detailed", xlab="", ylab="time", zlab="density")
以下3d图:
你可以看到表面看起来很乱。
所以我的第一个问题是:
如何获得更好的可见表面?
我的第二个问题:
如何在轴上获得真实日期?目前我使用c(1:2318),但在我的原始数据中
我可以通过命令fd
在rownames中看到日期。那么如何才能在我的轴上获得这些日期呢?
编辑:另外:如何在我的情节中省略网格上的黑线?那么只有一个绿色的表面?那看起来不是很好吗?
答案 0 :(得分:3)
您可以尝试在shade=1
来电中设置border=NA
和persp
。
显示日期有点棘手,但可以通过使用axes=FALSE
隐藏轴并通过使用trans3d
函数找到适当的坐标来重绘它们来完成。
这会产生类似的结果:
persp.mat <- persp(x, y, z, theta=50, phi=25, expand=0.75, col=color,
ticktype="detailed", xlab="", ylab="time", zlab="density",
shade=.4, border=NA, axes=F)
# The coords at which we want ticks
x.ticks <- seq(-0.2, 0.2, 0.1)
# Transform them in 3D
x.3d <- trans3d(x.ticks, 0, 0, persp.mat)
x.3d.1 <- trans3d(x.ticks, 0, -2, persp.mat)
# The coordinates for the text
x.3d.labels <- trans3d(x.ticks, -60, -3, persp.mat)
# Draw the axis ticks
segments(x.3d$x, x.3d$y, x.3d.1$x, x.3d.1$y)
# Write the labels
text(x.3d.labels$x, x.3d.labels$y, x.ticks, cex=0.8)
# Do the same for the other axes, customize the text labels
# to write dates
y.ticks <- seq(0, 2000, 500)
# Or whatever you like...
y.labels <- c("2009", "2010", "2011", "2012", "2013")
y.3d <- trans3d(0.2, y.ticks, 0, persp.mat)
y.3d.1 <- trans3d(0.2, y.ticks, -2, persp.mat)
y.3d.labels <- trans3d(0.22, y.ticks, -3, persp.mat)
segments(y.3d$x, y.3d$y, y.3d.1$x, y.3d.1$y)
text(y.3d.labels$x, y.3d.labels$y, y.labels, cex=0.8)