Отразить движение интервала на графике

У меня есть метод золотого сечения, мне нужно показать как меняется интервал на каждой итерации метода. Нужно сделать анимацию того как меняется интервал на оси X, но пока только вот такой статический вариант есть. Нужна помощь

import math
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

x_graf1 = []
y_graf1 = []

x_points1 = []
y_points1 = []

x_graf2 = []
y_graf2 = []

x_points2 = []
y_points2 = []


def draw():
    plt.plot(x_graf1, y_graf1)
    plt.plot(x_graf2, y_graf2)
    plt.scatter(x_points1, y_points1)
    plt.scatter(x_points2, y_points2)
    plt.show()


def f(x):
    return 2 * (x - 2) ** 2


def gold_section(a, b, l):
    max_iteration = 100000
    iteration = 0
    left = a + ((3 - math.sqrt(5)) / 2) * (b - a)
    right = a + b - left
    print(f"Текущий интервал: [{a} ; {b}]")
    x_graf1.append(a)
    y_graf1.append(f(a))
    x_graf2.append(b)
    y_graf2.append(f(b))
    x_points1.append(a)
    y_points1.append(0)
    x_points2.append(b)
    y_points2.append(0)
    while iteration < max_iteration:
        Fy = f(left)
        Fz = f(right)
        if Fy <= Fz:
            b = right
            right = left
            left = a + b - left
        else:
            a = left
            left = right
            right = a + b - right


        x_graf1.append(a)
        y_graf1.append(f(a))

        x_graf2.append(b)
        y_graf2.append(f(b))

        x_points1.append(a)
        y_points1.append(0)

        x_points2.append(b)
        y_points2.append(0)

        print(f"Текущий интервал: [{a} ; {b}], Итерация: {iteration + 1}")

        if math.fabs(a - b) <= l:
            print(f"Текущий интервал: [{a} ; {b}], кол-во итераций {iteration + 1}")
            return (a + b) / 2
        iteration += 1
    print("Привышено кол-во итераций")
    return (a + b) / 2


# a, b = map(float, input("Введите интервал(через пробел): ").split())
# l = float(input("Точность: "))
a = -10
b = 10
l = 0.000001
# print(f"Вы выбрали интервал от {a} до {b}, точность: {l}")
print(gold_section(a, b, l))
draw()


введите сюда описание изображения


Ответы (1 шт):

Автор решения: splash58

не знаю, насколько это то, что вы хотите, но можно накопить концы интервала в массивы A и B, тогда

        df1 = pd.DataFrame({'A':A, 'B':B})
        plt.bar(range(len(df1)), df1.B-df1.A, bottom=A)
        plt.show()

даст примерно такую картинку

введите сюда описание изображения

возможно, надо заморочаться с логарифмической шкалой по ординате

→ Ссылка