来自无序x,y,z数据的Numpy Meshgrid

时间:2019-01-30 09:46:45

标签: python numpy

我有x,y和z数据,如下所示(样本数据):

x_data = [2, 2, 2, 3, 3, 3, 1, 1, 1, 4, 4, 4]
y_data = [16, 64, 32, 64, 32, 16, 16, 32, 64, 32, 16, 64]
z_data = [64, 31, 29, 78, 72, 63, 93, 40, 54, 35, 44, 3]

由于我可以将每个z值映射到唯一的x / y数据对,因此我想将其绘制为matplotlib中的填充计数图。 contourf要求x和y要么是网格,要么是z相应尺寸的大小。

目前,我用于准备数据的代码如下:

mesh_x, mesh_y = np.meshgrid(np.unique(x_data), np.unique(y_data))
mesh_z = np.zeros(mesh_x.shape)

for x, y, z in zip(x_data, y_data, z_data):
    mesh_z[np.bitwise_and(y == mesh_y, x == mesh_x)] = z

由于np.unique对值进行了重新排序,因此无法使用np.reshape(z_data, mesh_x.shape)创建所需的数据结构。

尽管此解决方案有效,但我认为必须有一种更好的方法来存档此文件。

1 个答案:

答案 0 :(得分:1)

我认为这可以满足您的要求

import numpy as np
import matplotlib.pyplot as plt

x_data = np.asarray([2, 2, 2, 3, 3, 3, 1, 1, 1, 4, 4, 4])
y_data = np.asarray([16, 64, 32, 64, 32, 16, 16, 32, 64, 32, 16, 64])
z_data = np.asarray([64, 31, 29, 78, 72, 63, 93, 40, 54, 35, 44, 3])
# Sort coordinates and reshape in grid
idx = np.lexsort((y_data, x_data)).reshape(4, 3)
# Plot
plt.contourf(x_data[idx], y_data[idx], z_data[idx])

输出:

Contour plot