【问题标题】:How to create 2D slice plots from 3D data in R ?如何从 R 中的 3D 数据创建 2D 切片图?
【发布时间】:2017-09-18 14:18:11
【问题描述】:

这是我的 3d 图的 R 代码...我想生成这个 3d 图的 2d 切片。我在 R 中使用包 rgl。

   library(rgl)

    > ncv1
             [,1]          [,2]          [,3]
[1,] 0.0087173253  0.0015347787  0.0007591226
[2,] 0.0015347787  0.0066770936 -0.0001649119
[3,] 0.0007591226 -0.0001649119  0.0011324989

> ncv2
             [,1]          [,2]          [,3]
[1,] 0.0080515223  0.0012391863  0.0006745652
[2,] 0.0012391863  0.0064364687 -0.0001695962
[3,] 0.0006745652 -0.0001695962  0.0011687981

> ntruemean
[1] 4.775067 5.596896 1.142223

> open3d()
wgl 
 10 

plot3d(ellipse3d(ncv2,ntruemean),col="red",type='shade',xlim=c(-2,2),ylim=c(-2,2),zlim=c(-2,2))

plot3d(ellipse3d(ncv1,ntruemean),col="blue",type='wire',add=TRUE,xlim=c(-2,2),ylim=c(-2,2),zlim=c(-2,2))

rgl.postscript("persp3dd1.eps","eps")

【问题讨论】:

  • 您是否尝试过使用clipplanes3d
  • 我可以对图表进行切片,但是有什么方法可以将它切到中心。所以我们只看到红色的里面和蓝色的网外?我很难找到穿过中心的飞机。这是代码 a

标签: r plot 3d 2d rgl


【解决方案1】:

您可以在任何您喜欢的平面上轻松地对其进行切片。你只需要算出a x + b y + c z + d = 0格式的平面方程的系数,这是第一年的线性代数问题。

我不能为你做那件事,因为我不知道你打算画什么椭圆,或者你所说的“在中心”是什么意思。您使用ntruemean 作为变量名,但将其作为scale 参数传递,这实际上没有任何意义。我怀疑您打算将其作为 centre 参数传递。

假设这就是你的意思,这个剪辑在中心:

library(rgl)
ncv2 <- diag(1:3) # not your values
ntruemean <- 4:6  # also not your values
plot3d(ellipse3d(ncv2, centre = ntruemean),
       col="red", type='shade')
plot3d(ellipse3d(ncv2*1.01, centre = ntruemean), col = "blue", type="wire", add = TRUE)
normal <- 7:9  # Choose your own normal!
clipplanes3d(normal, d = -sum(normal * ntruemean))

【讨论】:

  • 我的椭圆的中心是 ntruemean
  • 您的代码没有以ntruemean为中心,而是以它为刻度。 rgl 中的椭球体与苹果的区别在于rgl 只能绘制曲面。当你切苹果时,你会看到表面之下是什么。要绘制它,rgl 需要支持“3D 纹理”,但它不支持。
猜你喜欢
  • 2011-10-16
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多