Ваша проблема в том, что с plot([],[])
вы не даете matplotlib
никаких данных и, следовательно, никак не можете определить пределы осей.Поэтому он использует некоторые значения по умолчанию, выходящие за пределы диапазона данных, которые вы на самом деле хотите построить.Таким образом, у вас есть два варианта:
1) Установите ограничения для некоторых значений, которые будут содержать все ваши построенные данные для всех случаев, например,
ax.set_xlim([-0.5,2.5])
ax.set_ylim([-2,6])
2) Пусть ax
вычислит пределыавтоматически каждый кадр и масштабирование графика см. здесь с использованием этих двух команд в вашей функции анимации (обратите внимание, что эта опция работает правильно, только если вы выключите блиц):
ax.relim()
ax.autoscale_view()
Здесьвсе еще полностью рабочая версия вашего кода (команды для решения (1) закомментированы, и я изменил некоторые обозначения):
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig,ax = plt.subplots()
x = np.linspace(-0.5,2.5,num = 200)
line, = ax.plot([],[])
#ax.set_xlim([-0.5,2.5])
#ax.set_ylim([-2,6])
##assuming some parameters, because none were given by the OP:
N = 20
func_args = np.array([np.linspace(1,2,N), np.linspace(2,1,N)])
def animate(i,func_params):
a=func_params[0,i]
b=func_params[1,i]
y=np.sin(a*np.pi*x)/b*x + (x-1)**4
line.set_xdata(x)
line.set_ydata(y)
ax.relim()
ax.autoscale_view()
return line, ax
##blit=True will not update the axes labels correctly
ani = FuncAnimation(
fig,animate,frames=N, fargs=(func_args,),interval = 100 #, blit=True
)
plt.show()