我有以下列表:
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=7
和y=2
的值为z
的{{1}}。
我想将其转换为矩阵,例如:
...以便能够创建具有正确的x轴和y轴以及颜色条的矩阵图(此处缺少颜色条,最好将零值设置为黑色):
在Excel中执行此操作非常简单,但是由于对matplotlib相当陌生,因此在python中执行此操作很困难。
我可能会使用plt.imshow()进行绘图
答案 0 :(得分:1)
NumPy的unique
和meshgrid
函数是您的朋友,可以根据您的坐标设置正确的网格。然后,您只需要在结果X
和Y
中找到与您的坐标相对应的正确索引。最后,在尺寸与Z
和X
相同的全零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函数来创建类似于所示的绘图。因此,也许可以给您一个额外的提示,您要记住哪个功能。
希望有帮助!