Спасибо за полезные советы! Вот мое решение:
df = pd.DataFrame.from_dict({'x' : [0,3,8,7,5,3,2,1],
'y' : [0,1,3,5,9,8,7,5]})
x = df['x']
y = df['y']
# calculate position and direction vectors:
x0 = x.iloc[range(len(x)-1)].values
x1 = x.iloc[range(1,len(x))].values
y0 = y.iloc[range(len(y)-1)].values
y1 = y.iloc[range(1,len(y))].values
xpos = (x0+x1)/2
ypos = (y0+y1)/2
xdir = x1-x0
ydir = y1-y0
fig, ax = plt.subplots()
ax.scatter(x,y)
ax.plot(x,y)
# plot arrow on each line:
for X,Y,dX,dY in zip(xpos, ypos, xdir, ydir):
ax.annotate("", xytext=(X,Y),xy=(X+0.001*dX,Y+0.001*dY),
arrowprops=dict(arrowstyle="->", color='k'), size = 20)
, которое дает это:
plt.quiver
не помогает в этом случае, так какэто создает поле стрелок. plt.arrow
масштабируется с осью, поэтому странно выглядящие стрелки, если единицы x и y не имеют одинаковый порядок величины. Таким образом, ax.annotate
был моим выбором. Аргументы xytext
& xy
указывают соответственно начало и конец стрелки.