python - 3D 绘图 : why are coordinate arguments input as 2D arrays?

标签 python matplotlib mplot3d

mplot3d 函数 plot_surface 要求将定义表面的点的坐标输入为三个二维数组 X、Y、Z。这是一个演示这些数组构造的工作示例。我用角度 u 和 v 参数化的球坐标表示 x、y、z 坐标。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')

# generate the coordinates on the surface by parameterizing 
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, 2 * np.pi, 100)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))

ax.plot_surface(x, y, z) 
plt.show()

我相信X,Y,Z表示的坐标恰好是所有三元组的集合[X[i,j], Y[i,j], Z[i,j]] 在 i 和 j 上建立索引。 (1) 这是正确的吗?

我为构建真实情节而编写的许多函数都采用三元组列表的参数,恰好采用上述三元组的形式;即 points = [[x1,y1,z1], [x2,y2,z2], ..., [xn, yn, zn]]。我预计此输入会被 plot_surface 接受,但事实并非如此。结果我发现自己需要相当频繁地在两种表示之间进行转换,例如通过

points = zip(*[x.flatten() for x in (X,Y,Z)])

我可以这样做,但我担心我也应该为我自己的函数使用二维数组格式。 (2) 除了易于编程构造这些数组之外,数组输入格式还有其他原因吗?例如,它的计算效率更高吗?

最佳答案

曲面图可能绘制为三角形网格。传递一个二维点数组可以明确每个三角形中应包含哪些点(可能是 [i][j]-[i​​+1][j]-[i​​][j+1][i][j+1]-[i+1][j]-[i​​+1][j+1]).

关于python - 3D 绘图 : why are coordinate arguments input as 2D arrays?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17532111/

相关文章:

python - 通过循环追加 Python 字典列表

python - 混淆矩阵颜色匹配数据大小而不是分类精度

python - 消除 3d 图垂直轴上的科学记数法(Python)

python - 当指定面色时,边缘线在 mplot3d 冲浪中消失

matplotlib - 尝试将3d子图添加到matplotlib图

python - 如何避免在 webapp 模板中硬编码 url

python - 批量加载巨大的数据集来训练 pytorch

python - 如果基于此算法存在,我如何弹出这封信?

python - 反转图例顺序 Pandas 情节

python - 直方图的颜色和标签不一致