Numpy ValueError:轮廓级别必须增加-如何绘制3个特征数据

Numpy ValueError:轮廓级别必须增加-如何绘制3个特征数据,numpy,matplotlib,Numpy,Matplotlib,当我使用虚拟数据运行此代码时,我得到: import numpy as np from matplotlib import pyplot as plt data = np.random.normal(0,1,[100,3]) x = data[:,0] y = data[:,1] z = data[:,2] plt.contour([x,y],z) 你知道这意味着什么以及我如何修复它吗?plt.contour的输入有点特殊,z值必须位于矩形二维网格上的值上,例如,请参见: ValueE

当我使用虚拟数据运行此代码时,我得到:

import numpy as np
from matplotlib import pyplot as plt

data = np.random.normal(0,1,[100,3])

x = data[:,0]
y = data[:,1]

z = data[:,2]

plt.contour([x,y],z)

你知道这意味着什么以及我如何修复它吗?

plt.contour
的输入有点特殊,z值必须位于矩形二维网格上的值上,例如,请参见:

ValueError: Contour levels must be increasing
您还可以使用
np.meshgrid
plt.contour
提供x和y值:

import matplotlib.pyplot as plt
import numpy as np

x = np.expand_dims(np.arange(1,11,1), axis=1)
y = np.expand_dims(np.arange(2,21,2), axis=0)
z = y * x

print(x.shape)
print(y.shape)
print(z.shape)

plt.figure()
plt.contour(z)
plt.show()
如果x和y的z值不规则,可以使用
plt.tricontour
,请参见以下示例:

XX,YY = np.meshgrid(x,y)
plt.figure()
plt.contour(XX, YY, z)
plt.show()
编辑:从JohanC的评论中,我了解到无需导入
matplotlib.tri
即可通过以下方式简化:

from matplotlib.tri import Triangulation

data = np.random.normal(0,1,[100,3])
x = data[:,0]
y = data[:,1]
#z = data[:,2]
z = x * y

tri = Triangulation(x,y)

plt.figure()
plt.tricontour(tri, z, )
plt.scatter(x,y, c=z)
plt.show()

``plt.contour`期望其输入在网格上。您可以尝试
plt.tricontour(x,y,z)
进行未排序的输入。@JohanC,我刚刚用这个键入了一个答案。。。
plt.figure()
plt.tricontour(x,y,z)
plt.scatter(x,y, c=z)
plt.show()