如何使用 matplotlib 将 3D numpy 数组可视化为 GIF? [关闭]

Posted

技术标签:

【中文标题】如何使用 matplotlib 将 3D numpy 数组可视化为 GIF? [关闭]【英文标题】:How to visualize 3D numpy array as GIF with matplotlib? [closed] 【发布时间】:2021-12-19 00:45:39 【问题描述】:

如何使用 matplotlib 将三维 numpy 数组可视化为 gif?

在 numpy 数组中,GIF 的图像沿 x 轴堆叠。 所以 GIF 应该显示平行于 yz 平面的切片。

import numpy as np
tmp = np.array([[[0, 0], [0, 165]],
                [[110, 0], [0, 0]],
                [[0, 55], [200, 0]]])

numpy 数组 tmp 应生成以下 GIF: test.gif

【问题讨论】:

我打算发布我的问题的答案。考虑到我自己回答了,我的问题的格式应该没问题。应该再快一点,不要等到 15 分钟再发布我的答案。我猜…… 如果我打算在将问题写入 SO 时回答问题,我应该如何提出问题?有没有这方面的指导方针? 我的第一条评论解释了一个问题的期望 【参考方案1】:

以下代码有一个函数,它接受一个 3d numpy 数组作为输入,并沿 x 轴获取切片,这些切片使用 matplotlib 的 FuncAnimation 函数显示。 之后动画被保存为 GIF。

如果您想更改输出颜色或遇到问题,这可能会有所帮助: 除了 colormap 'turbo',您还可以选择不同的。请参阅here 了解不同的颜色图。 如果您的颜色映射似乎关闭,您应该检查vminnumpy_3d_array 中的最小值)和vmaxnumpy_3d_array 中的最大值)。例如,如果您的所有值都低于 vmin,那么您可能会遇到问题,因此您的所有像素都将具有相同的颜色。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation


# generating gif out of slices of 3-dimensional numpy array
def generate_gif(numpy_3d_array):
    fig = plt.figure()
    im = plt.imshow(numpy_3d_array[0, :, :],    # display first slice
                    animated=True,
                    cmap='turbo',               # color mapping
                    vmin=np.iinfo('uint8').min, # lowest value in numpy_3d_array
                    vmax=np.iinfo('uint8').max) # highest value in numpy_3d_array
    plt.colorbar(label='turbo', shrink=0.75)
    plt.tight_layout()

    def init():
        im.set_data(numpy_3d_array[0, :, :])
        return im,

    def animate(i):
        im.set_array(numpy_3d_array[i, :, :])
        return im,

    # calling animation function of matplotlib
    anim = animation.FuncAnimation(fig,
                                   animate,
                                   init_func=init,
                                   frames=np.shape(numpy_3d_array)[0],  # amount of frames being animated
                                   interval=1000,                       # update every second
                                   blit=True)
    anim.save("test.gif")   # save as gif
    plt.show()

【讨论】:

我想答案现在已经改进了......无论如何都没关系,因为由于缺乏规范,该问题已被取消。 ;/

以上是关于如何使用 matplotlib 将 3D numpy 数组可视化为 GIF? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在Matplotlib中,如何将3D图作为插图包含进去?

如何将标签注释到 3D matplotlib 散点图?

Python 使用 matplotlib绘制3D图形

如何将matplotlib 3d图改为侧视图?

在 Matplotlib 3D 图中获取视角/相机角度?

如何使用 python/matplotlib 为 3d 绘图设置“相机位置”?