Я делаю функцию, которая берет временные ряды для значений недвижимости, рассчитывает возврат инвестиций за лаг, составляющий 2, 5 и 10 лет, а затем строит график этих доходов. Мой временной ряд имеет дату и время в качестве индекса и только один столбец с именем 'value' со значениями, например:
Это моя функция:
def gain(ts):
roi_2 = (ts - ts.shift(periods=24))/ts.shift(periods=24)*100
roi_5 = (ts - ts.shift(periods=60))/ts.shift(periods=60)*100
roi_10 = (ts - ts.shift(periods=120))/ts.shift(periods=120)*100
plt.figure(figsize = (12,8))
ax = plt.subplot(111)
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.plot(roi_2, label='Return in 2 Years')
ax.plot(roi_5, label='Return in 5 Years')
ax.plot(roi_10, label='Return in 10 Years')
ax.set_ylabel('Gain Percentage')
ax.set_xlabel('Year')
plt.yticks([-10,0,10,25,50,75,100,125,150,175,200], [str(x) + "%" for x in [-10,0,10,25,50,75,100,125,150,175,200]], fontsize=10)
ax.grid(which='major', axis='y', linestyle= "--", lw=0.5, color="black", alpha=0.3)
plt.title('Mean Zillow Home Value Index (ZHVI) - ROI Over Time Invested', fontsize=14)
plt.legend()
plt.show()
return roi_2, roi_5, roi_10
Когда я называю это прохождением моего временного ряда, я получаю это:
Что я пытаюсь сделать, этокак-то выделить точку, где отдача отрицательна - это потеря. Это были бы любые значения ниже линии 0 на графике. Я попытался заполнить весь график под y = 0 или покрасить линии в другой цвет, если они идут ниже 0, но все коды, которые я пробовал для этого, не работают. Я думаю, что моя главная трудность состоит в том, чтобы получить x и y для этих точек? Я не уверен, что я делаю неправильно, но я уверен, что это просто, я просто немного знаю о временных рядах и имею данные в качестве индекса, чтобы понять это.
Я считаю, что это простоax.fill_between(x, y1, 0)
сработает, но я не могу разобраться в своей функции, потому что не могу понять, как установить x и y1 для нее ...