You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly中同时渲染3D STL网格并叠加散点图

Plotly同时渲染STL网格与叠加散点实现方案

核心逻辑

Plotly 中plotly.graph_objects和plotly.express生成的图层(trace)完全兼容,只要将所有图层添加到同一个Figure对象中,就会在同一个3D坐标系下自动叠加渲染,不需要额外做适配。

前置依赖安装

先安装需要的第三方库:

pip install numpy numpy-stl plotly

其中numpy-stl用于读取STL网格文件的顶点、三角面数据。

完整实现代码

import plotly.graph_objects as go
import plotly.express as px
import numpy as np
from stl import mesh

# ----------------------
# 1. 读取STL网格数据
# ----------------------
# 替换成你的STL文件路径
stl_mesh = mesh.Mesh.from_file("your_model.stl")
# 提取所有顶点坐标
points = stl_mesh.points.reshape(-1, 3)
x, y, z = points[:, 0], points[:, 1], points[:, 2]
# 提取三角面索引
tri_face = stl_mesh.vectors.reshape(-1, 3)
i, j, k = tri_face[:, 0], tri_face[:, 1], tri_face[:, 2]

# ----------------------
# 2. 初始化画布并添加网格层
# ----------------------
fig = go.Figure()
fig.add_trace(
    go.Mesh3d(
        x=x,
        y=y,
        z=z,
        i=i,
        j=j,
        k=k,
        color="#d0d0d0",
        opacity=0.7, # 设为半透明,避免遮挡表面散点
        name="STL模型"
    )
)

# ----------------------
# 3. 叠加散点层(两种方式二选一即可)
# ----------------------
# 替换成你自己的散点坐标数据,这里用随机采样的网格顶点做示例
scatter_x, scatter_y, scatter_z = np.random.choice(x, 100), np.random.choice(y, 100), np.random.choice(z, 100)

# 方式1:直接用graph_objects添加散点
fig.add_trace(
    go.Scatter3d(
        x=scatter_x,
        y=scatter_y,
        z=scatter_z,
        mode="markers",
        marker=dict(size=4, color="crimson"),
        name="标记散点"
    )
)

# 方式2:用plotly express生成散点后追加到画布(即混用方案)
# px_scatter = px.scatter_3d(
#     x=scatter_x,
#     y=scatter_y,
#     z=scatter_z,
#     color_discrete_sequence=["crimson"]
# )
# fig.add_trace(px_scatter.data[0])

# ----------------------
# 4. 调整布局并渲染
# ----------------------
fig.update_layout(
    scene=dict(aspectmode="data"), # 保持模型原始比例
    showlegend=True
)
fig.show()

注意事项

  • 所有3D图层默认共用同一个scene坐标系,只要添加到同一个Figure对象就会自动对齐,不需要额外做坐标映射
  • 网格透明度建议设置在0.6~0.8区间,不透明的实体会完全挡住表面叠加的散点
  • 如果散点是STL模型表面的特征点,只要和STL使用同一套坐标系的数值,就可以实现精准贴合
  • 如果STL加载后出现面渲染错乱,可以先对提取的顶点做去重处理,修正三角面索引后再传入Mesh3d

内容的提问来源于stack exchange,提问作者alkanschtein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:09:23