Python 在函数的绘图中添加箭头以显示其方向

Python 在函数的绘图中添加箭头以显示其方向,python,python-3.x,matplotlib,plot,Python,Python 3.x,Matplotlib,Plot,我想在向量场中绘制一条路径(圆),并计算该场在路径上所做的功(线积分)。要将此可视化,重要的是查看圆路径的方向。所以我想知道是否有一种方法可以将箭头放在圆上(例如每20个点)来显示这一点 守则如下: import matplotlib.pyplot as plt import numpy as np t= np.linspace(0, 2*np.pi, 100) x= np.cos(t) y= np.sin(t) X= Y = np.arange(-2,2,0.2) X, Y = np.me

我想在向量场中绘制一条路径(圆),并计算该场在路径上所做的功(线积分)。要将此可视化,重要的是查看圆路径的方向。所以我想知道是否有一种方法可以将箭头放在圆上(例如每20个点)来显示这一点

守则如下:

import matplotlib.pyplot as plt
import numpy as np

t= np.linspace(0, 2*np.pi, 100)
x= np.cos(t)
y= np.sin(t)

X= Y = np.arange(-2,2,0.2)
X, Y = np.meshgrid(X,Y)
I = Y
J = -X

plt.figure()
plt.plot(x,y)
plt.quiver(X, Y, I, J)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
我在另一个问题上看到了这张照片,但答案对我来说并不适用(而且我的声誉不高,无法在那里发表评论或获得帮助)

问题链接:

PS.

Python3.6并使用最新版本

以下方法对曲线上的值进行采样,计算切线方向,并在绘制的曲线上覆盖一个短箭头:

import matplotlib.pyplot as plt
import numpy as np


t = np.linspace(0, 2*np.pi, 100)
x = np.cos(t)
y = np.sin(t)

# sample at 0, 1/3rd, and 2/3rd of curve 
adx0, adx1 = 0, len(t) // 3
adx2 = adx1 * 2

arrow0 = x[adx0+1], y[adx0+1], x[adx0+1]-x[adx0], y[adx0+1]-y[adx0]
arrow1 = x[adx1+1], y[adx1+1], x[adx1+1]-x[adx1], y[adx1+1]-y[adx1]
arrow2 = x[adx2+1], y[adx2+1], x[adx2+1]-x[adx2], y[adx2+1]-y[adx2]

X = Y = np.arange(-2, 2, 0.2)
X, Y = np.meshgrid(X, Y)
I = -Y
J = X

plt.figure()
plt.plot(x, y)
plt.arrow(*arrow0, shape='full', lw=0, length_includes_head=True, head_width=0.12) 
plt.arrow(*arrow1, shape='full', lw=0, length_includes_head=True, head_width=0.12)  
plt.arrow(*arrow2, shape='full', lw=0, length_includes_head=True, head_width=0.12)

plt.quiver(X, Y, I, J)

plt.xlabel('x')
plt.ylabel('y')
plt.show()
结果如下所示:


以下方法对曲线上的值进行采样,计算切线方向,并在绘制的曲线上覆盖一个短箭头:

import matplotlib.pyplot as plt
import numpy as np


t = np.linspace(0, 2*np.pi, 100)
x = np.cos(t)
y = np.sin(t)

# sample at 0, 1/3rd, and 2/3rd of curve 
adx0, adx1 = 0, len(t) // 3
adx2 = adx1 * 2

arrow0 = x[adx0+1], y[adx0+1], x[adx0+1]-x[adx0], y[adx0+1]-y[adx0]
arrow1 = x[adx1+1], y[adx1+1], x[adx1+1]-x[adx1], y[adx1+1]-y[adx1]
arrow2 = x[adx2+1], y[adx2+1], x[adx2+1]-x[adx2], y[adx2+1]-y[adx2]

X = Y = np.arange(-2, 2, 0.2)
X, Y = np.meshgrid(X, Y)
I = -Y
J = X

plt.figure()
plt.plot(x, y)
plt.arrow(*arrow0, shape='full', lw=0, length_includes_head=True, head_width=0.12) 
plt.arrow(*arrow1, shape='full', lw=0, length_includes_head=True, head_width=0.12)  
plt.arrow(*arrow2, shape='full', lw=0, length_includes_head=True, head_width=0.12)

plt.quiver(X, Y, I, J)

plt.xlabel('x')
plt.ylabel('y')
plt.show()
结果如下所示:


关于@Reblochon Masque的答案,我在循环中编写了他的代码,只是为了让它看起来更漂亮,你可以随意采样任意多的箭头(对于任何想使用它的人):


在@Reblochon Masque的回答之后,我将他的代码写在一个循环中,只是为了让它看起来更漂亮,你可以随心所欲地对箭头进行采样(对于任何想使用它的人):


我想答案和另一个问题是一样的。因此,如果它对你不起作用,你最好告诉我到底是什么不起作用。我想答案和另一个问题是一样的。所以,如果它对你不起作用,你最好告诉我到底是什么不起作用。非常感谢!在这个解中,箭头正好相反,因为你是从最终值中减去初始值。您正在执行
x[adx0]-x[adx0+1]
而不是正确的
x[adx0+1]-x[adx0]
。您还可以在图中看到箭头是反向的,因为单位圆
(cos(t),sin(t),0感谢您提请我注意@AniAggarwal;您的编辑忽略了反转基础向量场;我已对其进行了更正,并更新了绘图图像。非常感谢!正是我所期待的,在这个解决方案中箭头是反转的,因为您正在从最终值中减去初始值。您正在执行
x[adx0]-x[adx0+1]
而不是正确的
x[adx0+1]-x[adx0]
。您也可以看到图形中的箭头是反向的,因为单位圆
(cos(t),sin(t),0感谢您在@AniAggarwal中将这一点引起我的注意;您的编辑忽略了反转基础向量场;我已对其进行了更正,并更新了绘图图像。