为什么pyplot.contour()要求Z为2D数组?

为什么pyplot.contour()要求Z为2D数组?,第1张

为什么pyplot.contour()要求Z为2D数组

查看某人的文档

contour
发现,有两种方法可以调用此函数,例如
contour(Z)
contour(X,Y,Z)
。所以,你会发现它不需要任何
X
或者
Y
价值能够体现的。

但是,为了绘制轮廓,函数必须知道下面的网格。Matplotlib的

contour
基于矩形网格。但即便如此,允许
contour(z)
,与
z
作为一维数组,就不可能知道现场应该如何绘制。在的情况下
contour(Z)
,其中
Z
是一个二维数组,它的形状明确地将针对图中的网格。

一旦知道了该网格,是否将可选

X
Y
数组展平就变得无关紧要了。实际上,文档告诉我们的是:

X和Y必须都是与Z形状相同的2-D,或者它们都必须是1-D,以使len(X)是Z中的列数,而len(Y)是Z中的行数。

同样显而易见的是,某些东西

plt.contour(X_grid.ravel(), Y_grid.ravel(),Z_grid.ravel())
无法生成等高线图,因为有关网格形状的所有信息都将丢失,并且等高线函数无法知道如何解释数据。例如,如果
len(Z_grid.ravel())== 12
底层网格的形状可以是
(1,12), (2,6), (3,4), (4,3), (6,2), (12,1)

可能的解决方法当然是允许一维数组并引入参数

shape
,例如
plt.contour(x,y,z,shape=(6,2))
。但是事实并非如此,因此您必须忍受
Z
需要为2D的事实。

但是,如果您正在寻找一种方法来获得具有平坦(散乱的)数组的国土图,则可以使用

plt.tricontour()

plt.tricontour(X_grid.ravel(), Y_grid.ravel(), Z_grid.ravel())

在这里,将使用Delaunay三角剖分在内部生成三角形网格。因此,即使完全随机化的点也将产生不错的结果,如下图所示,将其与赋予的相同随机点进行比较

contour

(这里是产生这张图片的代码)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5663801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存