使用 plotly 在 3D 中绘制凸包

Plot convex-hull in 3D using plotly

我正在尝试使用 plotly 绘制一组点的 3D 凸包。我正在使用 Mesh3d 对象,但表面创建不正确(见下图)。我该如何解决这个问题?

import plotly.graph_objects as go
import itertools, math, numpy as np

from scipy.spatial import ConvexHull

# This simply creates a set of points:
n = 3
m = 3
E = np.array(list(itertools.product(np.arange(-1, 1.1, .5), repeat=m)))
V = [
 [-2.20676418,  1.53670924, -1.5541674 ],
 [ 0.63437404,  0.07306301,  3.82253086],
 [ 3.19989112,  0.71987311,  2.79373418]
]
x = np.array([np.dot(V, e) for e in E])

# Then I compute the convex hull using scipy:
xc = x[ConvexHull(x).vertices]

fig = go.Figure()
fig.add_trace(go.Mesh3d(x=xc[:, 0], y=xc[:, 1], z=xc[:, 2], color="blue", opacity=.5))
fig

当前输出为:

我想你错过的是 alphahull 选项。

如果你想要一个凸包你需要添加alphahull=0:

import plotly.graph_objects as go
import itertools, math, numpy as np

from scipy.spatial import ConvexHull

# This simply creates a set of points:
n = 3
m = 3
E = np.array(list(itertools.product(np.arange(-1, 1.1, .5), repeat=m)))
V = [
 [-2.20676418,  1.53670924, -1.5541674 ],
 [ 0.63437404,  0.07306301,  3.82253086],
 [ 3.19989112,  0.71987311,  2.79373418]
]
x = np.array([np.dot(V, e) for e in E])

# Then I compute the convex hull using scipy:
xc = x[ConvexHull(x).vertices]

fig = go.Figure()
fig.add_trace(go.Mesh3d(x=xc[:, 0], 
                        y=xc[:, 1], 
                        z=xc[:, 2], 
                        color="blue", 
                        opacity=.5,
                        alphahull=0))
fig

会给你想要的vube: