python - 来自 Wavefront OBJ 文件的 Plotly Mesh3d 绘图

标签 python plot 3d plotly wavefront

我正在尝试使用 Plotly 的 Mesh3D 绘制腿部的 3D 扫描图.

我用过 scatter_3d使用 XYZ 点来展示这个概念:

fig = px.scatter_3d(df, x='x', y='y', z='z', opacity = 0.8)

Plotly 3D Scatter Plot of XYZ points

然而,它看起来不像一个表面。因此,我尝试了 Mesh3d , 使用:
fig = go.Figure(data=[go.Mesh3d(x=x, y=y, z=z, color='lightpink', opacity=0.50)])

Plotly 3D Mesh of XYZ points

显然,这个 plotly 并不顺利。我试图在渲染图之前对 df 进行排序,但它没有帮助。

重申一下,我正在寻找此 XYZ 数据的平滑曲面图。

这是扫描的 XYZ data .

编辑:关于曲面图介绍的续信息

我用下面的代码实现了表面图。不幸的是,没有呈现任何 plotly (也没有伴随错误)。
colnames = ['x', 'y', 'z']
df = pd.read_csv('sandbox\leg.txt', sep = ' ', header = None, names = colnames)
x, y = np.array(df['x'].tolist()), np.array(df['y'].tolist())
df2 = df.pivot(index = 'x', columns = 'y', values = 'z')
z = df2.values
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
fig.show()

最佳答案

我在这里找到了一个绝妙的答案:https://plot.ly/~empet/15040/plotly-mesh3d-from-a-wavefront-obj-f/#/

作者用了go.Mesh3d .但是,也许更重要的突破是它们的功能:

def obj_data_to_mesh3d(odata):
    # odata is the string read from an obj file
    vertices = []
    faces = []
    lines = odata.splitlines()

    for line in lines:
        slist = line.split()
        if slist:
            if slist[0] == 'v':
                vertex = np.array(slist[1:], dtype=float)
                vertices.append(vertex)
            elif slist[0] == 'f':
                face = []
                for k in range(1, len(slist)):
                    face.append([int(s) for s in slist[k].replace('//','/').split('/')])
                if len(face) > 3: # triangulate the n-polyonal face, n>3
                    faces.extend([[face[0][0]-1, face[k][0]-1, face[k+1][0]-1] for k in range(1, len(face)-1)])
                else:
                    faces.append([face[j][0]-1 for j in range(len(face))])
            else: pass


    return np.array(vertices), np.array(faces)

这是最终的 plotly :

enter image description here

关于python - 来自 Wavefront OBJ 文件的 Plotly Mesh3d 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535205/

相关文章:

r - R中箱线图后面的网格

python - fatal error : *. h : No such file or directory. 运行 docker build 命令为 python 项目创建图像时

python - 在 Django 中更改表名

Python Matplotlib - 填充两个同心圆之间的区域

r - "Error in plot.new() : plot region too large",同时使用 R 在一个布局/面/网格内绘制 4 个 map (2*2)

java - Java 中的透视 3D 投影

c - 在同一个 OpenGL 窗口中绘制 2D 和 3D

safari - Safari 中 3d 转换元素顶部的清晰文本

python - 什么是卡住的 Python 模块?

python - PyQt5 - 组合框中有条件的颜色字段 - qsqltablemodel