Стрелка matplotlib дает значение ValueError: Истинное значение массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all () - PullRequest
0 голосов
/ 04 сентября 2018

Я получаю сообщение об ошибке, когда пытаюсь нарисовать стрелки, используя функцию arrow matplotlib.

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> arrow_start = np.random.normal(0, 1, [100, 2])
>>> arrow_vector = np.random.normal(0, 0.05, [100, 2])
>>> plt.arrow(x=arrow_start[:, 0], y=arrow_start[:, 1], 
...           dx=arrow_vector[:, 0], dy=arrow_vector[:, 1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\programdata\miniconda3\lib\site-packages\matplotlib-2.2.2-py3.6-win-amd64.egg\matplotlib\axes\_axes.py", line 4844, in arrow
    a = mpatches.FancyArrow(x, y, dx, dy, **kwargs)
  File "c:\programdata\miniconda3\lib\site-packages\matplotlib-2.2.2-py3.6-win-amd64.egg\matplotlib\patches.py", line 1255, in __init__
    if not length:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Это сообщение об ошибке имеет мало общего с тем, что происходит на самом деле. Я дал свое собственное решение ниже, чтобы другие могли извлечь уроки из моей отладки.

1 Ответ

0 голосов
/ 04 сентября 2018

Сообщение об ошибке не объясняет, что здесь происходит: matplotlib.pyplot.arrow и связанные matplotlib.axes.Axes.arrow, matplotlib.patches.FancyArrow не поддерживают построение более одной стрелки за раз.

Проблема легко решается чем-то вроде

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> arrow_start = np.random.normal(0, 1, [100, 2])
>>> arrow_vector = np.random.normal(0, 0.05, [100, 2])
>>> for i in range(len(arrow_start.shape[0])):
...     plt.arrow(x=arrow_start[i, 0], y=arrow_start[i, 1], 
...               dx=arrow_vector[i, 0], dy=arrow_vector[i, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...