2017-01-18 2 views
0

В настоящее время, когда я анимирую поверхность в matplotlib, я генерирую снимки вручную и сшиваю вместе с ImageMagick. Это похоже на стандартную анимацию matplotlib, поскольку она не переходит между двумя кадрами.«Ослабление» переходов в Matplotlib

Могу ли я облегчить (в терминологии D3js, и я уверен в отраслевой терминологии в более широком смысле - линейное/кубическое ослабление) во время перехода? Или существует функция в numpy для интерполяции между двумя кадрами (две поверхности) и заканчивается переходом?

Простым примером может быть переход от примера matplotlib к любой модификации поверхности.

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 
import numpy as np 


fig = plt.figure() 
ax = fig.gca(projection='3d') 

# Make data. 
X = np.arange(-5, 5, 0.25) 
Y = np.arange(-5, 5, 0.25) 
X, Y = np.meshgrid(X, Y) 
R = np.sqrt(X**2 + Y**2) 
Z = np.sin(R) 

# Plot the surface. 
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, 
         linewidth=0, antialiased=False) 

# Customize the z axis. 
ax.set_zlim(-1.01, 1.01) 
ax.zaxis.set_major_locator(LinearLocator(10)) 
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

# Add a color bar which maps values to colors. 
fig.colorbar(surf, shrink=0.5, aspect=5) 

plt.show() 

в

Z = np.sin(2*R) 
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, 
         linewidth=0, antialiased=False) 

ответ

0

Вы могли бы оценить np.sin(a * R) для диапазона a значений с помощью broadcasting:

n = 10 # or however many intermediate arrays you want 
a = np.linspace(1, 2, n) 
interp_z = np.sin(a[:, None, None] * R[None]) # an (n, 40, 40) array 

Теперь вы можете построить каждый из промежуточных массивов, сохранить его как изображение , затем сшивайте изображения вместе, как вам нравится:

for i, Z in enumerate(interp_z): 
    ax.plot_surface(X, Y, Z, ...) 
    fig.savefig('image_{}.png'.format(i)) 
+0

Я думаю, что это рабочий процесс, который OP сказал, что он в настоящее время использует. Он ищет что-то вроде способности D3 переходить между кадрами. –

+0

Ну, тогда я боюсь, что ему не повезло. Matplotlib был в первую очередь предназначен для создания статических графиков - нет никаких предустановок для любого типа «перехода», кроме ручного обновления состояний элементов графика и перерисовки холста на каждом кадре. –

Смежные вопросы