2013-12-02 2 views
2

Я занимаюсь исследованиями Person-Environment, и надеюсь добавить строки P = E и P = -E на плоскости xy поверхности отклика, нарисованной каркасом решетки. В настоящее время у меня есть код:R Решетка: как добавить y = x линия и y = -x линии на плоскости xy в решетчатой ​​каркасной функции?

PersonIV <- seq(-3, 3, length = 30) 
EnvironmentIV <- seq(-3, 3, length = 30) 
g.test.data <- expand.grid(PersonIV = PersonIV, EnvironmentIV = EnvironmentIV) 
g.test.data$DV <- .5 + .4 * PersonIV + .6 * EnvironmentIV + .9 * PersonIV^2 + .7 * PersonIV * EnvironmentIV - .3 * EnvironmentIV^2 

library(lattice) 
trellis.par.set("axis.line", list(col = NA)) 
wireframe(DV ~ PersonIV * EnvironmentIV, g.test.data, 
      drape = T, screen = list(z = 30, x = -75), 
      main = "Person - Environment Fit Response Surface", 
      xlab = list(xlim = c(-3:3), label = "Personal IV", col = "black", font = 1, cex = 1, rot = 15), 
      ylab = list(label = "Environment IV", ylim = c(-3: 3), font = 1, cex = 1, rot = -42), 
      zlab = list(label = "DV", zlim = c(0:5), font = 1, cex = 1, rot = 90, lines = T), 
      scale = list(arrows = F, cex = 1, col = "black", tck = 1), 
      par.settings = list(box.3d = list(col=c(1,1,NA,NA,1,NA,1,1,1))), 

     ) 

Спасибо большое!

+5

Пожалуйста, сделайте ваш пример воспроизводимым, поставив образец данных или используя один из тех, которые поставляются с ** решеткой ** или некоторым другим пакетом. –

+1

Ознакомьтесь с [см. Рис. 13.7] (http://lmdvr.r-forge.r-project.org/figures/figures.html?chapter=13;figure=13_07) в книге Дипаяна Саркара ** с решеткой ** (начиная с его определения 'panel.3d.contour()'). Это не совсем то, что вы хотите, но может быть легко адаптировано. То, что вам нужно сделать, это настроить две строки (в том месте, где он устанавливает контуры), и заменить 'zlim.scaled [1]' на его 'zlim.scaled [2]' (чтобы построить –

+0

Результаты, вероятно, будут (неизбежно) неудовлетворительными, потому что ** сетка **/** решетка ** использует «алгоритм живописцев». Поскольку [Дункан Мердок делает здесь] (https://stat.ethz.ch/pipermail/r-help/2011-May/277759.html), я мог бы предложить вместо этого использовать ** rgl **, который * будет * правильно обрабатывать линии, которые отстают от поверхностей. Удачи! –

ответ

0

Выполнение пользовательской функции панели и ее передача в функцию построения решетки (здесь wireframe) с аргументом panel - это общий способ сделать это. Для воссоздания существующего участка обычно используется panel.xyplot, и для добавления линий обычно используется panel.abline. Возможно, что-то вроде этого.

panel=function(...) {panel.xyplot(...); panel.abline(0,1); panel.abline(0,-1)} 
+0

Я пробовал, но похоже, что это не сработает. Надеюсь добавить строку y = x и y = -x на полу ограничивающей рамки поверхности ответа каркасного каркаса. Это похоже на добавление контура к пол, единственное различие - мне не нужен контур, но строки y = x и y = -x. Тонны благодарности! – user3058902

+0

Поскольку это 3D-график, похоже, вам нужен 'ltransform3dt o3d' и использовать конечные точки линий, а не только перехват/наклон, как в ссылке Josh O'Brien. Не должно быть слишком сложно написать новую функцию панели, аналогичную тому, что я здесь даю, или с воспроизводимым примером, кто-то здесь может помочь. – Aaron