Как использовать даты в этом коде для оси Y? - PullRequest
0 голосов
/ 08 апреля 2020

Человек, который сделал это, использовал даты на втором графике. Мне было интересно, как даты будут использоваться с функцией scipy.signal.argrelextrema.

С этим кодом он ничего не делает, он печатает пустой массив для peak_x и peak_y:

data_y = np.array('2015-07-04', dtype=np.datetime64) + np.arange(25)

Вот ссылка на оригинальный код: https://openwritings.net/pg/python/python-find-peaks-and-valleys-chart-using-scipysignalargrelextrema

import matplotlib
matplotlib.use('Agg') # Bypass the need to install Tkinter GUI framework

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

# Generate random data.
data_x = np.arange(start = 0, stop = 25, step = 1, dtype='int')
data_y = np.array('2015-07-04', dtype=np.datetime64) + np.arange(25) #edited part

# Find peaks(max).
peak_indexes = signal.argrelextrema(data_y, np.greater)
peak_indexes = peak_indexes[0]

# Find valleys(min).
valley_indexes = signal.argrelextrema(data_y, np.less)
valley_indexes = valley_indexes[0]


# Plot main graph.
(fig, ax) = plt.subplots()
ax.plot(data_x, data_y)

# Plot peaks.
peak_x = peak_indexes
peak_y = data_y[peak_indexes]
ax.plot(peak_x, peak_y, marker='o', linestyle='dashed', color='green', label="Peaks")
print(peak_x,peak_y)

# Plot valleys.
valley_x = valley_indexes
valley_y = data_y[valley_indexes]
ax.plot(valley_x, valley_y, marker='o', linestyle='dashed', color='red', label="Valleys")


# Save graph to file.
plt.title('Find peaks and valleys using argrelextrema()')
plt.legend(loc='best')
plt.savefig('argrelextrema.png')

Вот пример того, как это будет работать:

enter image description here

1 Ответ

0 голосов
/ 08 апреля 2020

Вы захотите использовать метод xticks. См. Ниже:

import matplotlib.pyplot as plt

names = [str(i) for i in range(20)]

x_data = [x for x in range(20)]
y_data = [x for x in range(20)]

plt.plot(x_data, y_data)
plt.xticks(x_data, label=names)
plt.show()

Для этого используется целое число от 1 до 19, приведенное в виде строки в качестве метки для оси X.

За исключением случаев, когда вы хотите поменяться имена для объектов времени данных, приведенных к строкам. Для xticks элемент x_data определяет, где будут находиться галочки. Вы можете использовать любой интервал точек, если они находятся в пределах xdata.

В вашем случае замените:

data_y = np.array('2015-07-04', dtype=np.datetime64) + np.arange(25) 

на


data_y_ticks = np.array('2015-07-04', dtype=np.datetime64) + np.arange(25) 

data_y = [i for i, _ in enumerate(data_y_ticks.tolist())]

затем построите график следующим образом:


plt.plot(data_y, x_data)
plt.xticks(data_y, label=data_y_ticks)
plt.show()

Просто один на один, имена ваших осей X и Y перевернуты в вашем коде. Я не исправил это в своем примере, однако поменял их месторасположение на графике, чтобы придать смысл графику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...