Угол степени и Vecorization с Python - PullRequest
0 голосов
/ 26 февраля 2019

Каждый раз, когда я запускаю скрипт для нового набора данных, угловые линии перемещаются.Я хочу, чтобы при каждом считывании нового набора данных две строки располагались под углом 345 (зеленая линия) и 330 (красная линия) соответственно.

Что не так с моим кодом?

Результаты должны выглядеть примерно так:

What I'm trying to achive looks like this every tim a new dataset with similar characteristic is added

1-й набор данных

data = np.array([10.79,10.87,10.94,10.95,11,11.5,10.89,11.45,11.94,12.17,12.45,12.09,13.65,13.5,13.25,13.18,13.28,
             13.45,13.81,13.8,14.08,14.09,14.48,14.5,14.08,14.54,14.6,15.48,16,17.049999,17.219999,16.99,
             17.23,17.200001,17.110001,18.190001,23.540001,22.25,21.15,22.09,22.85,21.4,21.41,20.780001,18.84,
             18.389999,18.09,18.280001,17.959999,21.969999,21.120001,20.25,19.879999,21.309999,21.84])

2-й набор данных

data = np.array([12.44,12.02,12.58,12.09,12,11.98,12.19,11.75,11.44,11.4,10.68,10.46,10.95,10.6,11.44,
             10.6,10.41,10.3,11.45,12.5,12.65,11.62,11.45,11.16,10.8,12.5,12.23,13.99,12.49,13.49,12.69,12.72,
             12.81,13.1,12.89,13.50,13.35])

Скрипт

import matplotlib.pyplot as plt
import numpy as np
import math
from scipy import signal

for number in data:

signal_max = (data > np.roll(data,1)) & (data > np.roll(data,-1))
signal_min = (data < np.roll(data,1)) & (data < np.roll(data,-1))


xm = np.argmax(data)
ym = np.amax(data)

angle1 = 345 # green
angle2 = 330 # red

x1, y1 = xm + len(data)-xm, ym + math.tan(angle1 * math.pi/180) * len(data)-xm
x2, y2 = xm + len(data)-xm, ym + math.tan(angle2 * math.pi/180) * len(data)-xm

plt.plot( [ xm, x1 ], [ym, y1 ], '-', color='g')
plt.plot( [ xm, x2 ], [ym, y2 ], '-', color='r')
plt.plot(data)
plt.show()

1 Ответ

0 голосов
/ 26 февраля 2019

Когда вы визуализируете углы на вашем графике, вам следует соблюдать осторожность, это соотношение сторон графика.Если соотношение сторон графика не равно, визуализированные углы не будут выглядеть так, как вы ожидаете!

Вы можете привести в порядок графики углов как:

angle1 = np.deg2rad(345) # green
angle2 = np.deg2rad(330) # red

x1, y1 = np.cos(angle1), np.sin(angle1)
x2, y2 = np.cos(angle2), np.sin(angle2)

plt.plot( [ xm, xm + x1 ], [ym, ym + y1 ], '-', color='g')
plt.plot( [ xm, xm + x2 ], [ym, ym + y2 ], '-', color='r')

Чтобы обеспечить равное соотношение сторон, вы можете использовать plt.gca().set_aspect('equal')

. Если вы хотите изменить длину строк, вы можете ввести переменную масштаба следующим образом:

scale = 2
x1, y1 = scale * np.cos(angle1), scale * np.sin(angle1)
x2, y2 = scale * np.cos(angle2), scale * np.sin(angle2)

Итак, еслиВы хотите, чтобы строки доходили до конца данных, которые вы можете установить

scale = data.size - xm

...