将数据数组转换为近似轮廓线图Python

问题描述

我有3个由3个列表组成的数组:

 x = np.array(xlist)
 y = np.array(ylist)
 z = np.array(zlist)

其中每个列表代表x坐标,y坐标以及每个指定坐标的权重。每个列表中大约有3000个值(对应于3000个点,每个点的权重为z)。

问题是,这些值是非常精确的浮点数,精确到10级。但是,我想做的是能够创建“ n”个具有近似阈值的轮廓线(不填充色,只有几条闭合的细线)。

即使我的z点非常精确并且可能没有2个都是精确的,但是它们很多,并且整体上以3d绘制时形成了“空心山”状的形状(所以在我的想象中,轮廓线就是等间隔的水平切片。

我没有代表z = f(x,y)的函数。因此,我不能只是这样做:

plt.contour(x,y,z,contour_num)

因为这揭示了z必须是2D数组的预期误差。

但是,z只是根据位置仅与x和y相关的一组点。

如何在没有网格的情况下绘制“近似轮廓图”(是否有手动方法直接对数据进行绘制?)?

编辑说明:

另外,正如您所知,当我尝试类似操作时遇到的错误是“值错误:无法将大小为3000的数组重塑为形状(3000,3000)”:

 X,Y = np.meshgrid(x,y)
 Z = z.reshape(3000,3000)
 plt.contour(X,Y,Z)
 plt.show()

如果没有其他方法可以创建轮廓线图,那为什么不起作用?我该如何运作?

解决方法

好吧,我回答了我自己的问题。做到这一点的方法是通过plt.tricontour(x,y,z,num_contours)。完美运行。