Как построить график, обратный временным рядам

#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()
  

вывод рисунка