使用Plotly绘制3D空间相交平面时仅显示XY平面问题求助
问题原因与解决方案
你遇到的问题是创建ysurf和xsurf时,没有正确构造符合Plotly Surface要求的二维网格数据。Plotly的Surface组件要求x、y、z三个参数的维度必须严格匹配,且需要通过二维网格定义平面的完整范围,仅传入一维数组无法正确渲染垂直平面。
修正后的代码
import plotly.graph_objects as go import numpy as np # 生成坐标轴范围的数组 axis_range = np.linspace(0, 2, 3) # 1. z=1的平面(XY平面方向) x_z1, y_z1 = np.meshgrid(axis_range, axis_range) z_z1 = np.ones_like(x_z1) zsurf = go.Surface(x=x_z1, y=y_z1, z=z_z1) # 2. y=1的平面(XZ平面方向) x_y1, z_y1 = np.meshgrid(axis_range, axis_range) y_y1 = np.ones_like(x_y1) ysurf = go.Surface(x=x_y1, y=y_y1, z=z_y1) # 3. x=1的平面(YZ平面方向) y_x1, z_x1 = np.meshgrid(axis_range, axis_range) x_x1 = np.ones_like(y_x1) xsurf = go.Surface(x=x_x1, y=y_x1, z=z_x1) fig = go.Figure() fig.add_trace(zsurf) fig.add_trace(ysurf) fig.add_trace(xsurf) fig.show()
关键修正点
- 使用
np.meshgrid生成二维网格数组:每个平面都需要基于两个坐标轴生成对应的二维网格,确保x、y、z三者的维度完全一致 - 固定值数组维度匹配:比如
y=1的平面,y_y1需要和x_y1、z_y1的维度相同,用np.ones_like()可以快速生成同维度的全1数组 - 明确平面的坐标轴对应关系:垂直平面需要基于另外两个轴的网格来定义,比如
x=1的平面需要基于y和z的网格来构造数据
运行修正后的代码后,三个平面会正常显示,且相交于点(1, 1, 1)。
内容的提问来源于stack exchange,提问作者noobnoob
相关产品推荐
相关产品推荐

