matplotlib 在x,y坐标处从Z向量绘制点

f0ofjuux  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(151)

我有两个向量,x和y:

x = [0,1,2,3,4]

y = [0,1,2,3]

我有一个长度为(x*y)的向量z,例如

[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

矢量z中的值对应于坐标[(0,0),(0,1), (0,2),(0,3),(1,0), (1,1)...(4,3)]
我想要一个图,我可以在指定的x,y坐标处从z绘制一个点。
所以我想在坐标(0,0)处的值为5。在(0,1)处的值为6,等等。
我该怎么做?我在网上看到过很多这样的例子,都是用plt.imshow或者热图来做的,但没有一个是我可以画散点图/线的。

zpgglvta

zpgglvta1#

您可以使用numpy meshgridmaplotlib pcolormesh函数来完成此操作。

import numpy as np
import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 2, 3]
z = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

X, Y = np.meshgrid(x, y)
Z = np.array(z).reshape(X.shape)

plt.pcolormesh(X, Y, Z)
plt.colorbar()
plt.show()

我们的想法是XY包含2D中的坐标,因此在索引[i, j]处,x坐标由X[i, k]给出,y坐标也是如此。最后,Z只是z的整形版本,在numpy数组中。
最后,如果你想要一个3D图,你可以使用matplotlib中的plot_surface函数。

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
plt.title('z as 3d height map')
plt.show()
olmpazwi

olmpazwi2#

在我看来,你正在寻找的是一个点云图。它是一个图,顾名思义,你产生一个坐标为(x,y,z)的点云。然而,大多数图形库称之为scatter3d。
在matplotlib中你可以用途:https://matplotlib.org/stable/gallery/mplot3d/scatter3d.html
您可能还需要重新构造数组以扩展x和y数组,以便在x[i],y[i]和z[i]之间建立一对一的对应关系。请考虑使用numpy的repeat和tile函数来执行此操作。

jmp7cifd

jmp7cifd3#

改编Noé Duruz的解决方案以使用散射:

import numpy as np
import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 2, 3]
z = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

X, Y = np.meshgrid(x, y)
Z = np.array(z).reshape(X.shape)

fig, ax = plt.subplots()
ax.scatter(X, Y, c=Z)
plt.show()

相关问题