将数据数组转换为近似等高线图 (Python)
Converting Arrays of Data into an Approximated Contour Line Map (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 必须是二维数组的预期错误。
但是,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)。完美运行。
我有 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 必须是二维数组的预期错误。
但是,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)。完美运行。