#python #numpy #matplotlib #time-series
#python #numpy #matplotlib #временные ряды
Вопрос:
У меня есть временные ряды, которые выглядят следующим образом:
import matplotlib.pyplot as plt
import numpy as np
data = [
0.0320312479743734,
0.029813902801834047,
0.029573831125162542,
0.018995469145011157,
0.027841876726597548,
0.041286583291366696,
0.04001532797701657,
0.036066913162358105,
0.05553811206482351,
0.019244458235334605,
0.0350094516761601,
0.025880977045744658,
0.00444492106908001,
0.021624276996590197,
0.024681835202500224,
0.020811115973629057,
0.022745881869923323,
0.03943057672586292,
0.025860359892249107,
0.020410736033227295
]
plt.plot(data)
Как в python я могу создать инверсию этой строки и построить ее? Под инверсией я подразумеваю что-то вроде этого (пожалуйста, игнорируйте ось y, она должна быть идентична первой, но я просто перевернул изображение по вертикали для демонстрации):
Я не имею в виду построение линии, противоположной абсолютному расстоянию, например:
Ответ №1:
Не уверен, есть ли для этого отличная numpy
функция, но вы можете сделать:
inverse = np.array(data)
inverse = inverse.max() - (inverse - inverse.min())
plt.plot(inverse)
Поверх исходных данных:
Ответ №2:
Вот решение, использующее только matplotlib, поэтому нам не нужно вычислять другой массив.
Постройте исходные данные дважды — первый раз как обычно, второй раз на перевернутой вторичной оси y:
fig, ax = plt.subplots()
# original data
ax.plot(data, label='Normal')
# original data on inverted secondary y-axis
ax2 = ax.twinx()
ax2.invert_yaxis()
ax2.set_yticks([])
ax2.plot(data, linestyle='--', label='Inverted')
# legend for all axes (fig.legend, not plt.legend)
fig.legend(loc="upper left", bbox_to_anchor=(0, 1), bbox_transform=ax.transAxes)
plt.show()