Взглянув на документацию по колчану , вы найдете подписи вызовов :
quiver(U, V, **kw)
quiver(U, V, C, **kw)
quiver(X, Y, U, V, **kw)
quiver(X, Y, U, V, C, **kw)
Вот как будут поняты позиционные аргументы. Это означает, что в вашем случае он понимает x
как U
и Ex
как V
, являясь U
и V
компонентами x и y векторов стрелок соответственно. Таким образом, поскольку ни векторы x, ни y не заданы для векторов, он отображает стрелки от 0 до длины массива, причем каждая стрелка начинается с целочисленной позиции, в вашем случае от 0 до 200.
Первое, на что нужно обратить внимание, чтобы решить эту проблему, это то, что описание quiver
- это Постройте двумерное поле стрелок. . Это внутренне двумерная функция. Поэтому, чтобы достичь желаемого результата, мы должны указать положения стрелок x и y, которые равны x
и f
. А также его составляющие стрелки x и y, которые можно легко рассчитать по градиенту Ex
. Градиент примерно равен dy / dx , поэтому, когда градиент f ' известен, стрелка в плоскости xy, представляющая его, равна (u, v) = (l, f '* l) , где l - это интервал в массиве x
.
В конце концов, вместо того, чтобы строить с помощью команды:
plt.quiver(x,f,np.ones_like(Ex),Ex,angles='xy')
решает проблему. angles='xy'
заставляет стрелки указывать от (x, y) до (x + u, y + v), как и должно быть в этом случае.