我有以下数据集:
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]
x
和y
是2D曲面上样本数据点的位置。
z
是该位置的数据样本的值。
但是,如您所见,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
是一维数组,其中包含样本位置岩石的金百分比,x
和y
占该样本位置。
如何将z
数组转换为二维矩阵以说明样本的位置?
最后,我想使用2D transformed_z
矩阵绘制散点图。
random_sample = transformed_z[x,y]
ax.scatter(y,x,c=transformed_z, cmap=im.cmap, norm=im.norm)
答案 0 :(得分:1)
IIUC您只想将z
和x
作为坐标以彩色编码散点图的形式绘制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')
我将这些值添加为文本,以便与数组进行更快的比较。