将X,Y,Z值转换为Matrixplot

时间:2019-11-12 08:11:09

标签: python python-3.x matplotlib

我有以下列表:

x_list = [7,10,3,9,9]
y_list = [2,5,1,3,2]

z_list = [4,1,5,2,3]

对于每个x值和y值,都有一个z值。例如:x=7y=2的值为z的{​​{1}}。

我想将其转换为矩阵,例如:

enter image description here

...以便能够创建具有正确的x轴和y轴以及颜色条的矩阵图(此处缺少颜色条,最好将零值设置为黑色):

enter image description here

在Excel中执行此操作非常简单,但是由于对matplotlib相当陌生,因此在python中执行此操作很困难。

编辑

我可能会使用plt.imshow()进行绘图

1 个答案:

答案 0 :(得分:1)

NumPy的uniquemeshgrid函数是您的朋友,可以根据您的坐标设置正确的网格。然后,您只需要在结果XY中找到与您的坐标相对应的正确索引。最后,在尺寸与ZX相同的全零Y矩阵中,可以将刚找到的索引处的元素设置为原始z数据。

以下是一些代码:

import numpy as np

x = np.array([7, 10, 3, 9, 9])
y = np.array([2,  5, 1, 3, 2])
z = np.array([4,  1, 5, 2, 3])

# Calculate X, Y grid from x and y, initialize Z data with zero
X, Y = np.meshgrid(np.unique(x), np.unique(y))
Z = np.zeros(X.shape)

# Find proper indices in grid, and set Z values accordingly
idx = np.squeeze([np.argwhere(np.logical_and(X == x[idx], Y == y[idx])) for idx in np.int32(np.arange(x.size))])
Z[idx[:, 0], idx[:, 1]] = z
print(Z)

然后,输出为:

[[5. 0. 0. 0.]
 [0. 4. 3. 0.]
 [0. 0. 2. 0.]
 [0. 0. 0. 1.]]

关于绘图:我想不出Matplotlib函数来创建类似于所示的绘图。因此,也许可以给您一个额外的提示,您要记住哪个功能。

希望有帮助!