在 Matplotlib 中制作旋转的 3D 图形
matplotlibpythondata visualization
要在 matplotlib 中制作旋转的 3D 图形,我们可以使用 Animation 类重复调用函数。
步骤
初始化网格数、每秒调用函数的频率、帧数的变量。
为曲线创建 x、y 和 z 数组。
使用 lambda 函数制作 z 数组。
要将函数传递到动画类中,请创建用户定义的函数以删除前一个图并使用 x、y 和 zarray 绘制曲面。
创建新图形或激活现有图形。
使用添加子图排列subplots() 方法。
使用 set_zlim() 方法设置 Z 轴限制。
调用 animation 类来为表面图制作动画。
要显示动画图,请使用 show() 方法。
示例
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True N = 50 fps = 250 frn = 75 x = np.linspace(-4, 4, N + 1) x, y = np.meshgrid(x, x) zarray = np.zeros((N + 1, N + 1, frn)) f = lambda x, y, sig: 1 / np.sqrt(sig) * np.exp(-(x ** 2 + y ** 2) / sig ** 2) for i in range(frn): zarray[:, :, i] = f(x, y, 1.5 + np.sin(i * 2 * np.pi / frn)) def change_plot(frame_number, zarray, plot): plot[0].remove() plot[0] = ax.plot_surface(x, y, zarray[:, :, frame_number], cmap="afmhot_r") fig = plt.figure() ax = fig.add_subplot(111, projection='3d') plot = [ax.plot_surface(x, y, zarray[:, :, 0], color='0.75', rstride=1, cstride=1)] ax.set_zlim(0, 1.1) ani = animation.FuncAnimation(fig, change_plot, frn, fargs=(zarray, plot), interval=1000 / fps) ani.save('526.gif') plt.show()