猿问

得到ValueError:'顶点'必须是形状为Nx2的二维列表或数组,当它是Nx2时?

我正在尝试使用此处概述的节点坐标和连接性来绘制网格:


关联


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


我将 x 和 y 定义为:


x = coords[:,0]

y = coords[:,1]

我在一个 numpy 数组中有节点连接connectivity,它有连接在一起的坐标的 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.shape[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")

并_to_unmasked_float_array(vertices)调用:


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]and verts.ndim= 2我会收到此错误消息


也np.asarray(verts, float).shape[1]和np.asarray(verts, float).ndim也是 2


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


还..


verts.shape

返回


(181660, 2)


ibeautiful
浏览 594回答 1
1回答

炎炎设计

由于您想绘制一个集合,因此您希望verts成为每个多边形的顶点列表。正如文档所说,从技术上讲,verts是一个序列,( verts0, verts1, ...)其中verts_i是一个顶点的 xy 元组序列,或形状 (nv, 2) 的等效 numpy 数组。因此,如果您的集合只有一个多边形,它仍然需要是一个包含单个条目的列表。在你的情况下PolyCollection([verts])
随时随地看视频慕课网APP

相关分类

Python
我要回答