Plotly go.Surface 3D曲面子图单个不显示问题求助
问题原因
第一个子图无法显示的核心问题是z数据维度不匹配:
- Plotly的
go.Surface要求z必须是二维网格矩阵,维度需要和x、y的网格对应(x和y如果是一维数组,z需是[len(y), len(x)]的二维数组;如果x、y是二维数组,z维度要和它们一致)。 - 你代码里的
zrange是一维数组(344,),无法构成3D曲面,因此只有坐标轴显示,没有曲面。
修复方案
将第一个子图的z数据改为二维网格形式,示例如下:
import plotly.graph_objects as go from plotly.subplots import make_subplots import numpy as np # Initialize figure with 4 3D subplots fig = make_subplots( rows=2, cols=2, specs=[[{'type': 'surface'}, {'type': 'surface'}], [{'type': 'surface'}, {'type': 'surface'}]]) # 修复第一个子图的数据源:生成二维网格数据 x1 = np.linspace(0, 90, 344) y1 = np.linspace(0, 100 , 344) xGrid1, yGrid1 = np.meshgrid(x1, y1) # 自定义z的计算逻辑,这里示例为x+y的曲面,可根据需求修改 z1 = xGrid1 + yGrid1 # Generate data for other subplots x = np.linspace(-5, 90, 10) y = np.linspace(-5, 60, 10) xGrid, yGrid = np.meshgrid(y, x) z = xGrid ** 3 + yGrid ** 3 # adding surfaces to subplots. fig.add_trace( go.Surface(x=x1, y=y1, z=z1, colorscale='Viridis', showscale=False), row=1, col=1) fig.add_trace( go.Surface(x=x, y=y, z=z, colorscale='RdBu', showscale=False), row=1, col=2) fig.add_trace( go.Surface(x=x, y=y, z=z, colorscale='YlOrRd', showscale=False), row=2, col=1) fig.add_trace( go.Surface(x=x, y=y, z=z, colorscale='YlGnBu', showscale=False), row=2, col=2) fig.update_layout( title_text='3D subplots with different colorscales', height=800, width=800 ) fig.show()
补充说明
- 所有
go.Surface的z数据都必须是二维结构,这是3D曲面绘制的基础要求——一维数据只能表示一条线,无法形成面。 - 你可以根据需求修改
z1的计算逻辑(比如z1 = np.sin(xGrid1/10) + np.cos(yGrid1/10)等),只要保证z是和x、y网格维度匹配的二维数组即可。
内容的提问来源于stack exchange,提问作者stella
相关产品推荐
相关产品推荐

