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

如何在Python Plotly的3D图中为Z投影添加区间或条件?

Plotly 3D曲面图自定义Z投影范围方案

我尝试用Python的Plotly库绘制带有Z投影的矩阵3D图,但不想像下图那样按0.5的间隔进行投影,希望仅投影Z值小于7.5的部分,不确定Plotly是否支持该功能,求解决方案。

Matrix 3D Plotting with Z Projection

以下是我尝试的代码:

def plotIntensity3D(self):
    z = self.matrix # Numpy 2D array with values between 5.4 and 8.2

    fig = go.Figure(data=[go.Surface(z=z, cmin=7,cmax=8.5)])
    # fig.update_traces(colorscale = [[0, 'rgb(255,0,0)'], [1, 'rgb(0,255,0)']])
    fig.update_traces(contours_z=dict(show=True, usecolormap=True, highlightcolor="limegreen", project_z=True))
    fig.update_layout(title='3D Light Intensity', autosize=True, width=1000, height=1000)
    
    fig.show()

解决方案

Plotly支持自定义Z投影的范围,你可以通过过滤投影数据+设置轮廓参数来实现仅投影Z<7.5的区域:

  1. 过滤投影数据:用numpy.where将Z值≥7.5的部分设为NaN,Plotly会忽略这部分数据的投影。
  2. 自定义轮廓范围:在contours_z中指定end=7.5,同时调整start和size来替代默认的0.5间隔。

修改后的代码如下:

import numpy as np
import plotly.graph_objects as go

def plotIntensity3D(self):
    z = self.matrix  # Numpy 2D array with values between 5.4 and 8.2

    # 生成仅保留Z<7.5的过滤数组,其余设为NaN
    z_proj_filtered = np.where(z < 7.5, z, np.nan)

    fig = go.Figure(data=[go.Surface(z=z, cmin=7, cmax=8.5)])
    fig.update_traces(
        contours_z=dict(
            show=True,
            usecolormap=True,
            highlightcolor="limegreen",
            project_z=True,
            start=z.min(),  # 投影起始值设为数据最小值
            end=7.5,        # 投影终止值设为7.5
            size=0.1        # 自定义投影间隔,替换默认的0.5
        ),
        # 将轮廓数据替换为过滤后的数组,只显示符合条件的投影
        contours_z=dict(z=z_proj_filtered)
    )
    fig.update_layout(title='3D Light Intensity', autosize=True, width=1000, height=1000)
    
    fig.show()

关键说明

  • 原始曲面图的z数据保持不变,确保完整显示所有数据。
  • z_proj_filtered仅用于控制投影的显示区域,过滤掉不需要的部分。
  • size参数可以根据需求调整,比如设为0.1会让投影线条更密集,设为0.2则更稀疏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:40:27