如何使用 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 了解不同的颜色图。
如果您的颜色映射似乎关闭,您应该检查vmin
(numpy_3d_array
中的最小值)和vmax
(numpy_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? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章