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

Plotly绘制带C值颜色编码的闭合3D网格曲面遇阻求助

问题:基于3D坐标和数值数组绘制闭合着色曲面

问题背景

拥有一组3D坐标数据(X,Y,Z)及等长数值数组C,目标是创建3D网格曲面并根据C值为曲面着色,要求曲面完整闭合(比如球体)。

Plotly mesh3d的尝试及问题

最初用Plotly的Mesh3d实现,但无法绘制闭合曲面(如球体仅显示下半部分),代码如下:

import plotly.graph_objects as go
import numpy as np

DATA = np.loadtxt(open("surface.dat", "rb"))
Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]

value = np.loadtxt(open("0.dat", "rb"))

fig = go.Figure(data=[
    go.Mesh3d(
        x=Xs,
        y=Ys,
        z=Zs,
        colorbar_title='value',
        colorscale="hot",
        # Intensity of each vertex, which will be interpolated and color-coded
        intensity=value,
        showscale=True
    )
])

fig.show()

效果:Plotly mesh3d仅显示球体下半部分,原因是无法处理同一(X,Y)对应多个Z值的情况。

拆分曲面的尝试及问题

尝试将曲面拆分为上下两部分分别绘制,但两部分中间出现缝隙,代码如下:

import plotly.graph_objects as go
import numpy as np

DATA = np.loadtxt(open("surface.dat", "rb"))
Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]
value = np.loadtxt(open("0.dat", "rb"))

#find the permutation that put Z in ascending order
p = Zs.argsort()

#sort the arrays with that permutation and invert them ('pos' stands for 'positive')
Xpos = Xs[p][::-1]
Ypos = Ys[p][::-1]
Zpos = Zs[p][::-1]
Vpos = value[p][::-1]


top = go.Mesh3d(
    x=Xpos,
    y=Ypos,
    z=Zpos,
    colorbar_title='value',
    colorscale="hot",
    intensity=Vpos,
    showscale=True
)


bottom = go.Mesh3d(
    x=Xs,
    y=Ys,
    z=Zs,
    colorbar_title='value',
    colorscale="hot",
    intensity=value,
    showscale=True
)

fig = go.Figure(data=[top,bottom])
fig.show()

效果:两个半球中间存在缝隙

需求及可行方向

期望得到完整闭合且按C值着色的曲面效果,可能的解决方向:

  • 填补两部分之间的缝隙
  • 使用其他库(如matplotlib、Open3D)
  • 其他未想到的方法
  • 先绘制球体再着色(优先支持任意形状,若无其他方案可考虑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:41