Я пытаюсь построить проекции координат на линию, но по какой-то причине Matplotlib строит проекции слегка наклонно.В идеале я бы хотел, чтобы (синие) проекции были перпендикулярны (зеленой) линии.Вот пример того, как это выглядит с примерами данных:

Как видите, углы между синими и зеленой линией слегка тупыевместо права.Я попытался поиграться с параметром rotation
до функции annotate
, но это не помогло.Код для этого графика приведен ниже, хотя данные могут выглядеть немного иначе, поскольку генератор случайных чисел не засеян:
import numpy as np
import matplotlib.pyplot as plt
prefs = {'color':'purple','edgecolors':'black'}
X = np.dot(np.random.rand(2,2), np.random.rand(2,50)).T
pts = np.linspace(-1,1)
v1_m = 0.8076549717643662
plt.scatter(X[:,0],X[:,1],**prefs)
plt.plot(pts, [v1_m*x for x in pts], color='lightgreen')
for x,y in X:
# slope of connecting line
# y = mx+b
m = -np.reciprocal(v1_m)
b = y-m*x
# find intersecting point
zx = b/(v1_m-m)
zy = v1_m*zx
# draw line
plt.annotate('',(zx,zy),(x,y),arrowprops=dict(linewidth=2,arrowstyle='-',color='lightblue'))
plt.show()