python-将x,y,z值映射到2D表面数据

时间:2018-11-26 00:10:36

标签: python arrays matplotlib

我有以下数据集:

x = [50.0,  55.0,   6.6,    35.0,   32.7,   33.2,   14.9,   60.0,   44.0,   38.1]
y = [50.0,  25.0,   47.4,   34.9,   56.3,   78.4,   81.9,   73.4,   46.8    ,65.6]
z = [0.3,   -1.5,   0.1,    1.0,    1.9,    -0.1,   -0.4,   -0.1,   0.3,    -0.0]   

xy是2D曲面上样本数据点的位置。 z是该位置的数据样本的值。

基本上,我想要这样的东西: enter image description here

但是,如您所见,z值尚未映射为2D网格格式。

这不是我想要的:

x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)

我在网上找到的所有示例都在假设某个轮廓图的情况下计算z矩阵,但对我而言并非如此。在我的情况下,z是一维数组,其中包含样本位置岩石的金百分比,xy占该样本位置。

如何将z数组转换为二维矩阵以说明样本的位置?

最后,我想使用2D transformed_z矩阵绘制散点图。

random_sample = transformed_z[x,y]
ax.scatter(y,x,c=transformed_z, cmap=im.cmap, norm=im.norm)

1 个答案:

答案 0 :(得分:1)

IIUC您只想将zx作为坐标以彩色编码散点图的形式绘制y中的值。

您无需为此而变换z,这可以完全使用给定的三个数组来完成:

import matplotlib.pyplot as plt

x = [50.0,  55.0,   6.6,    35.0,   32.7,   33.2,   14.9,   60.0,   44.0,   38.1]
y = [50.0,  25.0,   47.4,   34.9,   56.3,   78.4,   81.9,   73.4,   46.8    ,65.6]
z = [0.3,   -1.5,   0.1,    1.0,    1.9,    -0.1,   -0.4,   -0.1,   0.3,    -0.0]

plt.figure()

plt.scatter(x, y, c=z, cmap='Wistia')
cb = plt.colorbar()
cb.set_label('gold percentage of a rock (%)')
plt.xlabel('X')
plt.ylabel('Y')

for xt, yt, zt in zip(x, y, z):
    plt.text(xt, yt+1, str(zt), ha='center')

enter image description here

我将这些值添加为文本,以便与数组进行更快的比较。