Как сделать график с datetime и scipy peaks в Python? - PullRequest
1 голос
/ 07 августа 2020

Я взял один пример из вопроса и адаптировал его к своему набору данных, но когда дело доходит до построения графиков, я застрял. Я знаю, как построить график даты и времени + значения, но я не понял, как я могу сделать комбинацию.

Я получил следующий ответ: Ответ .

Пример имеет следующий код: Пример кода:

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

np.random.seed(42)

# borrowed from @Majid Mortazavi's answer
random_number1 = np.random.randint(0, 200, 20)
random_number2 = np.random.randint(0, 20, 100)
random_number = np.concatenate((random_number1, random_number2))
np.random.shuffle(random_number)

peaks, _ = find_peaks(random_number, height=100)

plt.plot(random_number)
plt.plot(peaks, random_number[peaks], "x")
plt.show()

Я адаптировал его к своему набору данных с реальными значениями, и у меня есть следующий код: Адаптированный код:

peaks, _ = find_peaks(my_dataset['quality'], height=500)

plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(peaks, my_dataset['quality'][peaks], "x")

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()

Изначально мой код для построения графика был таким, и он работал: Исходный код:

plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()

Но мне нужен такой же график, но со знаком «X» на вычисленных пиках.

Итак, окончательный результат должен быть примерно так: (Я отредактировал начальный сюжет краской, чтобы наглядно представить конечный результат) Artisti c визуализация конечного результата

Честно говоря не знаю как заставить работать. Не могли бы вы мне помочь?

Я высоко ценю любые усилия, чтобы помочь мне !!! Большое спасибо за продвижение!

1 Ответ

1 голос
/ 07 августа 2020

Как документация отчетов scipy.signal.find_peaks:

Возвращает : пики : ndarray Индексы пиков в x, которые удовлетворяют всем заданным условиям.

Ваша peaks переменная представляет собой массив индексов пиков. Итак, чтобы получить доступ к координатам x и y этих пиков, вы должны заменить:

plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(peaks, my_dataset['quality'][peaks], "x")

на

plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(x[peaks], y[peaks], "x")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...