2014-10-22 5 views
1

У меня есть довольно простой вопрос, но я просто не могу опустить голову. Как создать трехмерный поверхностный график с сеткой для следующих данных.R 3D поверхностный участок с переменными факторами

x = c("Jan","Feb","Mar","Apr","May","Jun") 
y = c("2010","2011","2012") 
z = matrix(seq(1:18),nrow=3) 

Я пробовал что-то вроде этого, но все еще не могу получить то, что хочу.

persp3d(x, y, z) 
plot3d(x, y, z) 

Спасибо.

ответ

2

Ошибка, которая persp3d() дает, когда x является переменным фактором или символ означает, что он будет принимать только числовые в x (и, вероятно, в y и z тоже) так x, y должны быть числовыми:

x <- 1:6 

Соответствуя месяц имена:

month <- c("Jan","Feb","Mar","Apr","May","Jun") 

Я отрекаюсь от своего предыдущего заявления здесь, теперь, когда я понимаю, как Z-значения plot3d карты в положениях, определенных x и y так y может оставаться как есть, но должно быть числовым:

y = c(2010,2011,2012) 

Кроме того, nrow(z) должны быть такими же, как nrow(x), опять-таки это ясно из ошибки, брошенной когда один пытается сделать наоборот. Итак:

z = matrix(seq(1:18),nrow=6) 

земля ваша поверхность без осей по умолчанию: (здесь, подход очень похож на то, как мы делаем на заказ осей с обычными 2D-графики в R)

library(rgl) persp3d(x, y, z, axes=F, ylab="", zlab="") box3d()

Наконец добавить ваши оси:

axis3d(edge='x++', at=x, labels=month, tick=T) axis3d(edge='y--', at=y, labels=y, tick=T, pos=c(0,0,0), line=-1) axis3d(edge='z+-', at=as.integer(range(z)), labels=as.integer(range(z)), tick=T)

enter image description here

+0

Это не совсем то, что я ожидал. 1). «X» отображается как «1,2,3,4,5,6», вместо «Jan», «Feb», «Mar», «Apr», «May», «Jun». 2). Это график рассеяния, а не участок поверхности. Спасибо. – 2607

+0

Правильно, мои первоначальные предположения о том, как работают «plot3d», неверны. См. Обновленный ответ. – shekeine

Смежные вопросы