【问题标题】:R Lattice: How to add y = x line and y = -x lines on the xy plane in the lattice wireframe function?R Lattice:如何在lattice线框函数的xy平面上添加y = x线和y = -x线?
【发布时间】:2023-03-27 17:55:01
【问题描述】:

我正在做Person-Environment fit研究,希望在Lattice线框绘制的响应面xy平面上添加P=E和P=-E线。目前,我得到的代码如下:

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))), 

          )

非常感谢!

【问题讨论】:

  • 请通过提供示例数据集或使用随 lattice 或其他软件包提供的数据集之一,使您的示例可重现。
  • 查看 Deepayan Sarkar 的 lattice 书中的 the code for Figure 13.7(从他对 panel.3d.contour() 的定义开始)。这不是您想要的完全,但可以很容易地适应。您需要做的事情是设置两条线(在他设置轮廓的地方),并用zlim.scaled[1] 替换他的zlim.scaled[2](将线绘制在底部而不是顶部盒子。
  • 结果可能(不可避免地)不令人满意,因为 grid / lattice 采用了“画家算法”。作为Duncan Murdoch does here,我可能会建议改用rgl,它正确处理落在曲面后面的线条。祝你好运!

标签: r lattice wireframe


【解决方案1】:

使用panel 参数制作自定义面板函数并将其传递给点阵绘图函数(此处为wireframe)是执行此操作的常用方法。要重新创建现有绘图,通常使用panel.xyplot,而要添加线条,通常使用panel.abline。也许是这样的。

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

【讨论】:

  • 我试过了,但它看起来不起作用。我希望添加的是线框响应面边界框底部的 y=x 线和 y = -x 线。这有点像在地板上添加轮廓;唯一的区别是我不需要轮廓,而是 y=x 和 y= -x 线。非常感谢!
  • 因为它是一个 3d 图,看起来您需要 ltransform3dto3d 函数并使用线的端点而不是仅仅截距/斜率,如 Josh O'Brien 提供的链接中所示。编写一个类似于我在这里给出的新面板功能应该不会太难,或者有一个可重复的例子,这里的人可能可以提供帮助。
猜你喜欢
  • 2015-01-13
  • 2016-03-15
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 2021-02-05
  • 2020-01-15
  • 2013-12-24
  • 1970-01-01
相关资源
最近更新 更多