我无法清楚地解释Matplotlib的plot_wireframe函数的X、Y和Z参数。我一直在使用他们提供的示例demo.py,但我不明白为什么X、Y和Z是二维数组。这是一个非常弯曲的3D图片,但如果你看X,Y,和Z数组,它们都是120×120二维数组。Matplotlib的文档有以下简洁的描述:“数据值”。有人能详细说明一下吗?我喜欢Matplotlib,但是它的文档可能有点稀疏。
根据答案更新问题。也许二维数组的第一维表示3D空间中的一条线,而线框是用来连接所有的线的。在这个例子中,我在z坐标为1.0的x,y平面上画了两个四分圆:
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)

我猜第一维是线数,或者是函数数,第二维是点数。
发布于 2019-03-22 00:15:07
在plot_wireframe(X,Y,Z)中,X是x坐标,Y是y坐标,Z是z坐标。这些必须是二维数组。原因是绘图功能需要一个2D网格。因此,(X[i,j], Y[i,j], Z[i,j])在笛卡尔空间中定义了一个点。i,j是网格索引。
现在的问题可能是,为什么我们需要i,j作为网格索引,而不能使用单一的一维网格与索引k,这样X,Y,Z将是一维数组?
也就是说,因为在(X[k], Y[k], Z[k])的情况下,关于哪个点位于另一个点旁边的信息丢失了。在2D网格中,您可以毫不含糊地确定(X[i,j], Y[i,j], Z[i,j])是否连接到( (X[i+1,j], Y[i+1,j], Z[i+1,j])的一个邻居),以及(X[i,j-1], Y[i,j-1], Z[i,j-1])。
在1D情况下,(X[k+1], Y[k+1], Z[k+1])显然连接到(X[k], Y[k], Z[k]),但这只给了您两个连接,而您需要在线框中连接4个连接。
发布于 2019-03-21 20:59:44
让我用一些数字来解释。对于x的每个值,都有一个y-值的范围。假设你在三维曲面上总共有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。
https://stackoverflow.com/questions/55289048
复制相似问题