如何在不定义其面的情况下在 Python Plotly 中绘制 3D 形状的外部?
How to plot the outside of a 3D shape in Python Plotly without defining its faces?
我正在尝试在 Python Plotly 中绘制一些 3D 形状。为了练习,我试着画了一个立方体。
我尝试了 Isosurface
命令,因为我只对形状的外部感兴趣,但令人惊讶的是,输出不是立方体。
import plotly.graph_objects as go
import numpy as np
x=[0, 0, 1, 1, 0, 0, 1, 1]
y=[0, 1, 1, 0, 0, 1, 1, 0]
z=[0, 0, 0, 0, 1, 1, 1, 1]
myisosurf = go.Isosurface(x=x,y=y,z=z,value= np.ones(len(x)))
fig = go.Figure(data=myisosurf)
fig.show()
我确实让它与 Mesh3D
命令一起工作(在 here 的帮助下),但事实上它还需要 i, j, k
的参数设置,使得我更喜欢更直接的方法。特别是在处理比立方体更复杂的形状时,设置 i, j, k
参数会非常困难。
i= [7, 0, 0, 0, 4, 4, 6, 1, 4, 0, 3, 6]
j= [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k= [0, 7, 2, 3, 6, 7, 1, 6, 5, 5, 7, 2]
my3dmesh = go.Mesh3d(x=x,y=y,z=z, i=i, j=j, k=k, intensity = np.linspace(1, 1, 8, endpoint=True),name='y')
fig = go.Figure(data=my3dmesh)
fig.show()
如何在不通过 i,j,k
参数手动定义其面的情况下让 Python Plotly 显示形状的外部?
感谢@Adreas Deak 的评论,看来 Mesh3D
命令的 alphahull parameter 可以指示 Plotly 显示输入中坐标的凸包。
不使用 alphahull 参数(或使用 alphahull = -1
)Delaunay 三角剖分用于计算坐标周围的面,使用 i, j, k
参数值。
用alphahull = 0
,用凸包的方法计算坐标周围的人脸,结果只有'outside'的形状,不需要设置i, j, k
参数。
所以:
import plotly.graph_objects as go
import numpy as np
my3dmesh = go.Mesh3d(x=x,y=y,z=z, alphahull = 0, intensity = np.linspace(1, 1, 8, endpoint=True),name='y')
fig = go.Figure(data=my3dmesh)
fig.show()
我正在尝试在 Python Plotly 中绘制一些 3D 形状。为了练习,我试着画了一个立方体。
我尝试了 Isosurface
命令,因为我只对形状的外部感兴趣,但令人惊讶的是,输出不是立方体。
import plotly.graph_objects as go
import numpy as np
x=[0, 0, 1, 1, 0, 0, 1, 1]
y=[0, 1, 1, 0, 0, 1, 1, 0]
z=[0, 0, 0, 0, 1, 1, 1, 1]
myisosurf = go.Isosurface(x=x,y=y,z=z,value= np.ones(len(x)))
fig = go.Figure(data=myisosurf)
fig.show()
我确实让它与 Mesh3D
命令一起工作(在 here 的帮助下),但事实上它还需要 i, j, k
的参数设置,使得我更喜欢更直接的方法。特别是在处理比立方体更复杂的形状时,设置 i, j, k
参数会非常困难。
i= [7, 0, 0, 0, 4, 4, 6, 1, 4, 0, 3, 6]
j= [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k= [0, 7, 2, 3, 6, 7, 1, 6, 5, 5, 7, 2]
my3dmesh = go.Mesh3d(x=x,y=y,z=z, i=i, j=j, k=k, intensity = np.linspace(1, 1, 8, endpoint=True),name='y')
fig = go.Figure(data=my3dmesh)
fig.show()
如何在不通过 i,j,k
参数手动定义其面的情况下让 Python Plotly 显示形状的外部?
感谢@Adreas Deak 的评论,看来 Mesh3D
命令的 alphahull parameter 可以指示 Plotly 显示输入中坐标的凸包。
不使用 alphahull 参数(或使用 alphahull = -1
)Delaunay 三角剖分用于计算坐标周围的面,使用 i, j, k
参数值。
用alphahull = 0
,用凸包的方法计算坐标周围的人脸,结果只有'outside'的形状,不需要设置i, j, k
参数。
所以:
import plotly.graph_objects as go
import numpy as np
my3dmesh = go.Mesh3d(x=x,y=y,z=z, alphahull = 0, intensity = np.linspace(1, 1, 8, endpoint=True),name='y')
fig = go.Figure(data=my3dmesh)
fig.show()