使用Plotly绘制曲面数据时如何正确匹配坐标构造Z变量
Plotly Surface 坐标匹配问题解答
核心原因:Plotly Surface 对z数组的维度有固定约定
Plotly的go.Surface组件要求输入的z二维数组满足:
- 数组的**行(第0维度)**对应
y参数的所有取值,每一行的所有元素是同一个y值下,不同x值对应的z值 - 数组的**列(第1维度)**对应
x参数的所有取值,每一列的所有元素是同一个x值下,不同y值对应的z值
错误写法的问题
你最开始的构造方式:
Z = np.array([[results[x][y] for y in Y] for x in X ])
生成的数组形状为(len(X), len(Y)),行对应x的取值、列对应y的取值,和Plotly要求的维度顺序正好相反,因此渲染出来的曲面坐标完全错位。
正确写法的逻辑
你修改后的构造方式:
Z = np.array([[results[x][y] for x in X] for y in Y ])
生成的数组形状为(len(Y), len(X)),外层遍历y生成每一行,内层遍历x填充同一行的不同列,正好符合Plotly的维度要求,因此渲染结果正确。
符合直觉的替代方案
如果你不想改变循环的遍历顺序,也可以对原来的z数组做转置,效果完全一致:
Z = np.array([[results[x][y] for y in Y] for x in X ]).T
这个约定是3D可视化库的通用设计,和矩阵的索引习惯匹配:通常我们用矩阵的行号对应垂直方向的y轴,列号对应水平方向的x轴,和常规数学坐标系统只是索引顺序的约定差异,没有本质冲突。
内容的提问来源于stack exchange,提问作者econbernardo
相关产品推荐
相关产品推荐

