在網上找了好幾個方法, 最後還是出現各種問題,解決不了播放GIF的功能。 最後,通過ChatGPT給出了簡單明瞭的方案(使用第三方庫imageio和matplotlib.animation來實現),調試直接通過。 但有小瑕疵,就是顯示gif時隱藏掉坐標軸的功能無效,於是再做了一下優化。 [最終代碼] ...
在網上找了好幾個方法, 最後還是出現各種問題,解決不了播放GIF的功能。
最後,通過ChatGPT給出了簡單明瞭的方案(使用第三方庫imageio
和matplotlib.animation
來實現),調試直接通過。
但有小瑕疵,就是顯示gif時隱藏掉坐標軸的功能無效,於是再做了一下優化。
[最終代碼]
顯示GIF動畫:
import matplotlib.pyplot as plt import matplotlib.animation as animation import imageio import numpy as np import os # -------------display gif--------------- def display_gif_file(): # 載入GIF文件 gif_path = "mygif.gif" gif = imageio.mimread(gif_path) # 創建圖形視窗 fig = plt.figure() # 定義更新函數,用於更新圖像 def update(frame): plt.clf() # 清空圖形視窗 plt.imshow(frame) # 顯示當前幀 plt.axis('off') # 隱藏x軸和y軸 """ #方法二# # 創建圖形視窗和子圖 fig, ax = plt.subplots() # 定義更新函數,用於更新圖像 def update(frame): ax.clear() # 清空子圖 ax.imshow(frame) # 顯示當前幀 ax.set_axis_off() # 隱藏x軸和y軸 """ # 創建動畫 ani = animation.FuncAnimation(fig, update, frames=gif, interval=60) # 顯示動畫 plt.show()
GIF圖片生成方法:
# -------------generate gif----------------- def generate_gif_file(): y = np.random.randint(30,90, size=(20)) filenames = [] num = 0 for i in y: num += 1 # 繪製40張折線圖 plt.plot(y[:num]) plt.ylim(10, 300) # 保存圖片文件 filename = f'{num}.png' filenames.append(filename) plt.savefig(filename) plt.close() print("save:"+filename) # 生成gif finalImgName =r'mygif.gif' with imageio.get_writer(finalImgName, mode='I') as writer: for filename in filenames: image = imageio.imread(filename) writer.append_data(image) print(filename) # 刪除折線圖 for filename in set(filenames): os.remove(filename) print("gif done.")
GIF效果演示: