#r #rgl
Вопрос:
У меня есть график persp3d, показывающий показатели дефолта компаний на основе рейтинга (от AAA до CCC-) и времени (от 1 до 20 лет). Мне удалось показать линейный график с осями в виде чисел, однако я хотел бы, чтобы они были с метками от AAA до CCC — вместо 5,10,15. Я также попытался использовать surface3d() и bbox3d(), но мне это не удалось. Код, который я сейчас использую, таков:
Y lt;- c(1:dim(aggregate_row)[2]) # Tenors X lt;- c(1:dim(aggregate_row)[1]) # Ratings Z lt;- as.matrix.data.frame(aggregate_row) cc lt;- colorRamp(rev(rainbow(10))) Zsc lt;- (Z-min(Z))/diff(range(Z)) rgbvec2col lt;- function(x) do.call(rgb,c(as.list(x),list(max=500))) colvec lt;- 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")
Ответ №1:
Вы не включили свои данные, так что я подделаю некоторые:
aggregate_row lt;- 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
В результате получается следующая картина:
Комментарии:
1. Отлично, это хорошо работает. Большое спасибо!