首页 > 解决方案 > 为什么 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)

由线框连接的两个四分之一圆

我猜第一个维度是行号或函数号,第二个是点号。

标签: pythonmatplotlib

解决方案


让我用一些数字来解释。对于 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。


推荐阅读