Как сделать фиксированный масштаб графика в matplotlib?

Имеется динамический график, который обновляется каждый "кадр". При размещении первой точки формируется оси, но когда добавляются новые точки, которые не входят в диапазон этих осей, оси начинают увеличиваться, что искажает отображение графика. Как сделать фиксированные оси с самого начала построения графика? К примеру 100 по x и 100 по y.

Код:

import os
import numpy as np

from matplotlib import pyplot as plt
from math import cos, sin

ONE_GRAD = 0.0174533
COEFFICIENT = 1.1
START = 0

os.popen("rm -rf " + os.path.dirname(os.path.abspath(__file__)) + "/dir/*")

vector1 = [2, 6]

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)


def new_point(x, y):  # Новая точка при повороте
    return x * np.cos(ONE_GRAD) + y * np.sin(ONE_GRAD), y * np.cos(ONE_GRAD) - x * np.sin(ONE_GRAD)


def forward(x, y):
    x += 0.1 if x > 0 else - 0.1
    y += 0.1 if y > 0 else - 0.1
    return x, y


for number in range(720):
    print("x = {}, y = {}".format(vector1[0], vector1[1]))
    ax.plot(vector1[0], vector1[1], "go")
    plt.savefig('./dir/graph{}.png'.format(number))
    vector1[0], vector1[1] = forward(*new_point(vector1[0], vector1[1]))

Иллюстрация проблемы


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

Автор решения: S. Nick

Попробуйте так:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
  

fig = plt.figure()
ax = plt.axes(xlim=(-50, 50), ylim=(-50, 50))
line, = ax.plot([], [], "go",  lw=2)
  
def init():
    line.set_data([], [])
    return line,
  
xdata, ydata = [], []
  
def animate(i):
    t = 0.1*i
    x = t * np.sin(t)
    y = t * np.cos(t)
      
    xdata.append(x)
    ydata.append(y)
      
    line.set_data(xdata, ydata)
    return line,
      
plt.title('Анимация')
plt.axis('off')

anim = animation.FuncAnimation(
    fig, 
    animate, 
    init_func=init,
    frames=500, 
    interval=20, 
    blit=True
)
  
plt.show()

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

→ Ссылка