将刻度名称添加到 persp3d 图

Adding tick names to persp3d plot

我有一个 persp3d 图,根据评级(AAA 到 CCC-)和时间(1 到 20 年)显示公司的违约率。 我设法显示了一个以轴为数字的线图,但是我想让它们的标签为 AAA 到 CCC- 而不是 5、10、15。我也尝试过使用 surface3d() 和 bbox3d(),但没有成功。 我现在使用的代码是:

Y <- c(1:dim(aggregate_row)[2]) # Tenors
X <- c(1:dim(aggregate_row)[1]) # Ratings
Z <- as.matrix.data.frame(aggregate_row)
cc <- colorRamp(rev(rainbow(10)))
Zsc <- (Z-min(Z))/diff(range(Z))
rgbvec2col <- function(x) do.call(rgb,c(as.list(x),list(max=500)))
colvec <- apply(cc(Zsc),1,rgbvec2col)
#surface3d(X,Y,Z,col=colvec)
#bbox3d(color=c("white","black"), xlab=c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "s", "t", "v"))
persp3d(X,Y,Z,col=colvec,xlab="Ratings",ylab="tenor",zlab="Default Rate",front="lines",back="lines")

你没有包含你的数据,所以我会伪造一些:

aggregate_row <- matrix(1:400, 20, 20)

得到你想要的坐标轴的方法是告诉persp3d不要画坐标轴,然后自己画。例如,

library(rgl)

persp3d(X,Y,Z,col=colvec,xlab="Ratings",ylab="tenor",zlab="Default Rate",front="lines",back="lines",axes=FALSE)
box3d()
axis3d("x")    # the default
axis3d("y", at = c(5, 10, 15), labels = c("AAA", "BBB", "CCC"))
axis3d("z-+")  # move to a different edge

这会产生下图: