Как сделать фиксированный масштаб графика в 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()
