python - 为什么 Matplotlib 的 plot_wireframe 二维数组的参数是?
问题描述
我找不到 Matplotlib 的 plot_wireframe 函数的 X、Y 和 Z 参数的清晰解释。我一直在玩他们提供的示例wire3d_demo.py,但我不明白为什么 X、Y 和 Z 是二维数组。这是一张非常弯曲的 3D 图片,但如果您查看 X、Y 和 Z 阵列,它们的大小都是 120 x 120 的 2D 阵列。Matplotlib 的文档有这个简洁的描述:“数据值”。谁能详细说明一下?我喜欢 Matplotlib,但它的文档可能有点稀疏。
根据答案更新问题。也许 2D 数组的第一个维度代表 3D 空间中的一条线,而线框的构造是为了连接所有的线。在此示例中,我在 x,y 平面上绘制两个四分之一圆,z 坐标相距 1.0:
temp_x = []
temp_y = []
temp_z1 = []
temp_z2 =[]
import math
# x^2+y^2=4
for i in range(201):
x = 0.01 * i
temp_x.append(x)
y = math.sqrt(4-(x*x))
temp_y.append(y)
temp_z1.append(0.0)
temp_z2.append(1.0)
X=np.array([temp_x,temp_x])
Y=np.array([temp_y,temp_y])
Z=np.array([temp_z1,temp_z2])
# Plot a basic wireframe.
ax.plot_wireframe(X, Y, Z)
我猜第一个维度是行号或函数号,第二个是点号。
解决方案
让我用一些数字来解释。对于 x 的每个值,都有一个 y 值范围。假设您在 3-d 曲面上共有 9 个点。它们中的每一个都有一个 x 值、一个 y 值和一个相应的 z 值。假设 x = 1、2、3 和 y = 1、2、3。
现在对于 x 的每个值,有 3 个 y 点,因为你有一种网格网格
x = 1 --> y = 1, 2, 3
x = 2 --> y = 1, 2, 3
x = 3 --> y = 1, 2, 3
同样,对于每个 y 值,有 3 个 x 点。
y = 1 --> x = 1, 2, 3
y = 2 --> x = 1, 2, 3
y = 3 --> x = 1, 2, 3
所以 x 和 y 和 9 的总组合
(x, y) --> (1, 1), (1, 2), (1, 3),
(2, 1), (2, 2), (2, 3),
(3, 1), (3, 2), (3, 3)
因此,x 值的形状现在变为 (3x3),因为您总共有 9 个值。类似地,y 值的形状变为 (3x3)。现在对于这些 (x, y) 对中的每一个,您在 3d 空间中都有一个相应的 z 值。因此,您的 z 值也必须是 3x3 数组。
相同的概念和解释适用于任何数量的点,在您的问题中,这个数字是 120x120。
推荐阅读
- python - 尝试使用 sklearn.preprocessing 时出现 Python 语法错误
- symfony4 - Symfony 4:控制器要求您为“$id”参数提供一个值
- c# - WeakReference 只将对象保留在 1 代?
- python - 如何使用字符串访问类属性?
- regex - 使用正则表达式的字符串中的总排除/包含
- c++ - 使用 GetModuleHandleEx() 或 LoadLibrary() 获取静态链接 DLL 的模块句柄 (HMODULE) 哪种方式更好?
- angular - 角度反应形式和按钮禁用/启用
- cxf - 没有斜杠的 CXF WSDL 命名空间
- google-apps-script - 在 Google Apps 脚本中,我将如何获取所有子文件夹和所有子子文件夹以及所有子子文件夹等?
- angular - 非空断言可以与三元相结合吗?