Как заменить метки осей моего трехмерного графика в R датами? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать трехмерный график кривой доходности, как показано ниже, но я хотел бы показать на оси x (ось времени) правильные даты вместо чисел. Помещение даты вместо чисел в качестве переменных в функцию напрямую не работает, потому что функция surf3D принимает только матрицы в качестве входных данных. Я пытался использовать другие аргументы, такие как xaxt='n' или axes = FALSE, но ни один из них, похоже, не работает. Кто-нибудь может мне помочь? Спасибо!

suppressWarnings(suppressMessages(library("plot3D")))
suppressWarnings(suppressMessages(library("YieldCurve")))
suppressWarnings(suppressMessages(library("xts")))

tau <- 1:10 * 12

# Data
rates_1 <- c(8.15, 7.11, 6.90, 7.72, 7.65, 7.40, 7.00, 6.84, 6.58, 6.29, 5.06, 4.94, 4.23, 3.69, 3.92, 4.77, 5.13, 6.24, 6.18, 5.28, 5.27, 4.64, 4.76, 4.46)
rates_2 <- c(8.27,  7.27,  7.13,  7.89 , 7.84,  7.77  ,7.51 , 7.36 , 6.97 , 6.85  ,5.72,  5.84 , 5.34,  4.84,  4.56 , 5.76 , 5.91, 6.77 , 6.83 , 5.81 , 5.77 , 5.30 , 5.39 , 5.15 )
rates_3 <-  c( 8.27,  7.31,  7.24 , 7.95 , 7.83,  7.77,  7.58 , 7.45,  7.18,  7.04,  5.99 , 5.98 , 5.78 , 5.36 , 5.06 , 6.08 , 6.24, 6.86,  6.96,  6.07,  6.06 , 5.78 , 5.84 , 5.50)
rates_4 <- c( 7.90,  7.10,  7.16 , 7.93 , 7.82 , 7.76,  7.57 , 7.51  ,7.32  ,7.22 , 6.38,  6.25,  6.07 ,  5.78 , 5.36 , 6.17  ,6.40, 6.93 , 6.99, 6.22 , 6.10,  5.88,  6.05, 5.85)
rates_5 <- c(7.75,  6.90,  7.08 , 7.82 , 7.95,  7.68 , 7.38 , 7.49 , 7.29 , 7.33,  6.49  ,6.50 , 6.09,  6.14 , 5.53 , 6.08,  6.38 , 6.70 , 6.85 , 6.28  ,  6.00 , 5.87,  5.93, 5.89)


yields <- xts(cbind(rates_1, rates_2, rates_3, rates_4, rates_5), 
              order.by = seq(as.Date("1970-01-01"),as.Date("1971-12-31"), by = "month"))

# Fit the yield curve model
beta <- Nelson.Siegel(yields, c(12,36,60,84,120))
fitted_yields <- NSrates(beta, tau)

# 3D Plot
par(mfrow = c(1, 1), mar = c(1, 1, 1, 1))

n <- length(tau)
t <- nrow(fitted_yields)
z <- as.matrix(fitted_yields)
y <- matrix(rep(1 : n, t), nrow = t, byrow = T)
x <- matrix(rep(1 : t, each = n), nrow = t, byrow = T)

surf3D(x = x, y = y, z = z , bty = "bl2", phi = 30, theta = 22, expand = 0.5, level = 3,
       ticktype = "detailed", xlab = "Time", ylab = "Maturity (Months)", zlab = "Yields (%)",
       colkey = FALSE, cex = 0.6, xaxt='n')
...