首页 > 解决方案 > R plotly mesh3 通过原点的坐标线

问题描述

我尝试在 R 中使用 plotly 以 3D 方式绘制立方体和球,type =“mesh3D”。我成功地绘制了正确的图,但是无法让坐标线穿过原点,点 (0,0,0)。关于如何做到这一点的任何建议?代码示例:

library(misc3d)
library(plotly)
grid <- 100
f.1 <- function(x, y, z){
   (x^2+y^2+z^2)
}
f.2 <- function(x, y, z){
  abs(x)+abs(y)+abs(z)
}
x <- seq(-1, 1, length=grid) 
y <- seq(-1, 1, length=grid)
z <- seq(-1, 1, length=grid)
g <- expand.grid(x=x, y=y, z=z)
voxel.1 <- array(with(g, f.1(x,y,z)), c(grid,grid,grid))
voxel.2 <- array(with(g, f.2(x,y,z)), c(grid,grid,grid))
cont.1 <- computeContour3d(voxel.1, level=1, x=x, y=y, z=z)
idx.1 <- matrix(0:(nrow(cont.1)-1), ncol=3, byrow=TRUE)
cont.2 <- computeContour3d(voxel.2, level=1, x=x, y=y, z=z)
idx.2 <- matrix(0:(nrow(cont.2)-1), ncol=3, byrow=TRUE)
axx <- list(gridcolor="rgb(255,255,255)",zerolinecolor="rgb(0,0,0)")
axy <- list(gridcolor="rgb(255,255,255)",zerolinecolor="rgb(0,0,0)")
axz <- list(gridcolor="rgb(255,255,255)",zerolinecolor="rgb(0,0,0)")
plot.1 <- plot_ly(x = cont.1[,1], y = cont.1[,2], z = cont.1[,3],
           i = idx.1[,1], j = idx.1[,2], k = idx.1[,3],
           type = "mesh3d",opacity = 0.1,intensity=seq(0,1,length=4),showscale = FALSE,colors="red") %>%
add_trace(x = cont.2[,1], y = cont.2[,2], z = cont.2[,3],
         i = idx.2[,1], j = idx.2[,2], k = idx.2[,3],color="blue",
type="mesh3d",opacity=0.7,intensity=seq(0,1,length=4),
showscale=FALSE,inherit=FALSE) %>%
layout(scene = list(xaxis=axx,yaxis=axy,zaxis=axz))
plot.1

它通过 (1,0,0)、(0,1,0) 和 (0,0,1) 绘制零线,但无法通过 (0,0,0) 绘制。

标签: rplot3dplotly

解决方案


推荐阅读