如何在Python Plotly的3D图中为Z投影添加区间或条件?
Plotly 3D曲面图自定义Z投影范围方案
我尝试用Python的Plotly库绘制带有Z投影的矩阵3D图,但不想像下图那样按0.5的间隔进行投影,希望仅投影Z值小于7.5的部分,不确定Plotly是否支持该功能,求解决方案。

以下是我尝试的代码:
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的区域:
- 过滤投影数据:用
numpy.where将Z值≥7.5的部分设为NaN,Plotly会忽略这部分数据的投影。 - 自定义轮廓范围:在
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
相关产品推荐
相关产品推荐

