2016-03-06 7 views
3

Мне нужно рассчитать угол между линией и горизонтальной. Моя математика в средней школе, похоже, терпит неудачу.Рассчитать угол (градусы) в Python между линией (с наклоном x) и горизонтальной

import matplotlib.pyplot as plt 
import numpy as np 

x = [8450.0, 8061.0, 7524.0, 7180.0, 8247.0, 8929.0, 8896.0, 9736.0, 9658.0, 9592.0] 
y = range(len(x)) 

best_fit_line = np.poly1d(np.polyfit(y, x, 1))(y) 

slope = (y[-1] - y[0])/(x[-1] - x[0]) 
angle = np.arctan(slope) 

print 'slope: ' + str(slope) 
print 'angle: ' + str(angle) 

plt.figure(figsize=(8,6)) 
plt.plot(x) 
plt.plot(best_fit_line, '--', color='r') 
plt.show() 

Результаты являются следующие:

slope: 0.00788091068301 
angle: 0.00788074753125 

slope of best-fit line

мне нужен угол между горизонтальной и красной пунктирной линией. Просто взглянув на это, вероятно, должно быть что-то между 30-45 градусами. Что я делаю не так?

* относительно slope = (y[-1] - y[0])/(x[-1] - x[0]), я также пробовал numpy.diff и scipy.stats.linregress, но и не удался.

+0

Вы забыли рассчитать масштаб своего графика. – jtbandes

+0

Также, пожалуйста, используйте [arctan2] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.arctan2.html)! – jtbandes

+0

hi jtbandes, как мне рассчитать масштаб моей диаграммы? – ljc

ответ

9

Линия идет в направлении от 0 до 9 и в направлении от 7500 до 9500. Поэтому ваш slope составляет всего 0,00788091068301, а не 0,57 для примерно 30 °. Ваши расчеты правильные, но лучше использовать arctan2:

angle = np.rad2deg(np.arctan2(y[-1] - y[0], x[-1] - x[0]))