Python 获取值错误:';顶点';如果是Nx2,则必须是形状为Nx2的二维列表或数组?

Python 获取值错误:';顶点';如果是Nx2,则必须是形状为Nx2的二维列表或数组?,python,matplotlib,mesh,Python,Matplotlib,Mesh,我正在尝试使用节点坐标和连接性绘制网格,如下所述: 我有一个存储在numpy数组中的节点坐标列表(x、y和z坐标) 我将x和y定义为: x = coords[:,0] y = coords[:,1] 我有一个numpy数组中的节点连接性连接性,它有连接在一起的坐标的id号 然后,按照他们的示例,执行以下操作: xy = np.c_[x,y] verts= xy[connectivity] pc = matplotlib.collections.PolyCollection(verts) 我

我正在尝试使用节点坐标和连接性绘制网格,如下所述:

我有一个存储在numpy数组中的节点坐标列表(x、y和z坐标)

我将x和y定义为:

x = coords[:,0]
y = coords[:,1]
我有一个numpy数组中的节点连接性
连接性
,它有连接在一起的坐标的id号

然后,按照他们的示例,执行以下操作:

xy = np.c_[x,y]
verts= xy[connectivity]
pc = matplotlib.collections.PolyCollection(verts)
我得到了这个错误:

  File "C:\Users\deden\AppData\Local\Continuum\anaconda3\envs\dhi\lib\site-packages\matplotlib\path.py", line 130, in __init__
    "'vertices' must be a 2D list or array with shape Nx2")

ValueError: 'vertices' must be a 2D list or array with shape Nx2
检查:

xy。形状[1]
为2和
xy.ndim
2

回溯文件中的第130行是:

vertices = _to_unmasked_float_array(vertices)
if vertices.ndim != 2 or vertices.shape[1] != 2:
    raise ValueError(
        "'vertices' must be a 2D list or array with shape Nx2")
\u to_unmasked_float_数组(顶点)
调用:

def _to_unmasked_float_array(x):
    """
    Convert a sequence to a float array; if input was a masked array, masked
    values are converted to nans.
    """
    if hasattr(x, 'mask'):
        return np.ma.asarray(x, float).filled(np.nan)
    else:
        return np.asarray(x, float)
如果
verts.shape[1]
verts.ndim
=2,我不明白为什么会收到此错误消息

同样
np.asarray(垂直,浮动)。形状[1]
np.asarray(垂直,浮动)。ndim
也是2

到底发生了什么事?我错过什么了吗?非常感谢任何人的帮助

还有

verts.shape
返回

(181660, 2)

由于要绘制集合,因此希望
verts
是每个多边形的顶点列表。更严格地说

verts
是一个
(verts0,verts1,…)
序列,其中
verts\u i
是一个顶点的xy元组序列,或一个形状的等效numpy数组(nv,2)

因此,如果集合只有一个多边形,它仍然需要是一个包含单个条目的列表。就你而言

PolyCollection([verts])

谢谢,这种方法很有效-我有一个每个网格元素的节点数数组,所以基本上只是根据这些计数分割坐标,所以我的verts对象是一个数组列表,其中每个数组都是Nx2,每个多边形/元素都有顶点…然后只需执行
PolyCollection(verts)
成功了。你知道我如何用另一个数组给这些多边形的面上色吗?我得到了每个多边形的平均z值(基于相关节点的z值),并尝试将
cmap=matplotlib.cm.jet
添加到
PolyCollection
调用中,然后执行
pc.set_数组(zs)
(zs是长度为我的顶点列表的np.array)但是当我试图绘制它时,我得到了一个错误:
AttributeError:'list'对象没有属性“ndim”
…如果你有任何想法,请告诉我我可以编辑OP以获得完整的回溯听起来像是另一个问题。所以你可以问一个关于这个问题的新问题。谢谢你在OP上的帮助,我终于想出了下一个问题