Анимационная интерполяция Python Matplotlib - PullRequest
0 голосов
/ 08 апреля 2020

Я хотел бы сделать анимацию интерполяции. Это мой код на данный момент:

import scipy.interpolate as itp
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
import matplotlib.animation as animation

def update(i,Z):
    x = np.arange(0,Z.shape[0])
    y = np.arange(0,Z.shape[0])
    I = itp.interp2d(x, y, Z, kind='cubic') 
    xi = np.linspace(0, Z.shape[0]-1, Z.shape[0]+1) 
    yi = np.linspace(0, Z.shape[0]-1, Z.shape[0]+1)
    Z = I(xi, yi)
    return Z

Z = np.random.randint(10, size=(4, 4))

fig, ax = plt.subplots()
matrice = ax.matshow(Z)
plt.colorbar(matrice)

ani = animation.FuncAnimation(fig, update, frames=19, interval=500,fargs=(Z,))

fig.show()

Итак, как вы можете видеть, я хочу показать прогресс интерполяции, но он не работает. Z-матрица никогда не меняется. Не могли бы вы мне помочь. Заранее спасибо.

1 Ответ

0 голосов
/ 08 апреля 2020

Спасибо за помощь. Мне удалось решить мою проблему:

import scipy.interpolate as itp
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
import matplotlib.animation as animation

def update(i,Z,size_initial):
    x = np.arange(0,size_initial)
    y = np.arange(0,size_initial)
    I = itp.interp2d(x, y, Z, kind='cubic') 
    xi = np.linspace(0, size_initial-1, i+size_initial) 
    yi = np.linspace(0, size_initial-1, i+size_initial)
    Z = I(xi, yi)
    matrice.set_data(Z)
    return matrice,

size_initial = 4
Z = np.random.randint(100, size=(size_initial, size_initial))
fig, ax = plt.subplots()
matrice = ax.matshow(Z)
plt.colorbar(matrice)


ani = animation.FuncAnimation(fig, update, frames=50, interval=500,fargs=[Z,size_initial])

fig.show()
...