【问题标题】:matplotlib arrow gives ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()matplotlib 箭头给出 ValueError:具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()
【发布时间】:2018-09-11 09:53:55
【问题描述】:

当我尝试使用 matplotlib 的 arrow 函数绘制箭头时出现错误。

>>> 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()

此错误消息与实际发生的问题几乎没有关系。我在下面给出了我自己的解决方案,所以其他人可以从我的调试中学习。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    错误消息没有解释这里发生了什么:matplotlib.pyplot.arrow 和关联的matplotlib.axes.Axes.arrowmatplotlib.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])
    

    【讨论】:

      猜你喜欢
      • 2020-01-28
      • 2020-05-12
      • 2016-01-26
      • 2019-07-30
      相关资源
      最近更新 更多