gpt4 book ai didi

python - "Easing"Matplotlib 中的转换

转载 作者:行者123 更新时间:2023-12-01 16:08:28 27 4
gpt4 key购买 nike

目前,当我在 matplotlib 中为表面制作动画时,我手动生成快照并使用 ImageMagick 拼接在一起。这类似于标准的 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)

最佳答案

您可以使用 broadcasting 为一系列 a 值评估 np.sin(a * R) :

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))

关于python - "Easing"Matplotlib 中的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com