получение ValueError: «вершины» должны быть 2D-списком или массивом с формой Nx2, когда это Nx2? - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь построить меня sh, используя координаты узла и связь, как указано здесь:

ссылка

У меня есть список координат узла, хранящийся в массив numpy (координаты xy и z)

Я определяю x и y как:

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

У меня есть подключение узла в массиве numpy connectivity, оно имеет номера идентификаторов координат, которые соединяются вместе

, затем, следуя их примеру, сделайте следующее:

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] и verts.ndim = 2

также np.asarray(verts, float).shape[1] и np.asarray(verts, float).ndim также 2

что, черт возьми, происходит? я что-то пропустил? был бы очень признателен, кто-нибудь помочь

также ..

verts.shape

возвращает

(181660, 2)

1 Ответ

1 голос
/ 30 января 2020

Поскольку вы хотите нарисовать коллекцию, вы хотите, чтобы verts был списком вершин на многоугольник . Если говорить более технически, то, как говорится в документации, ,

verts - это последовательность ( verts0, verts1, ...), где verts_i - это последовательность из xy кортежей вершин или эквивалентный numpy массив формы (nv, 2).

Следовательно, если ваша коллекция имеет только один многоугольник, она все равно должна быть списком с одной записью. В вашем случае

PolyCollection([verts])
...