为多个Xarray图制作带有固定颜色条的干净高质量GIF

问题描述 投票:1回答:1

我想从xarray的多个图中制作出gif。我需要所有图表中的颜色条都相同以跟踪更改。将颜色固定在颜色栏刻度上很容易,但是颜色会不断变化。不知何故制作GIF会弄乱颜色!我该如何解决?

#making GIF
fns_image=glob(save_image_dir+'/'+'*')
fns_image.sort()
with imageio.get_writer(save_gif_dir+gif_name, mode='I') as writer:
for filename in fns_image: 
    print(filename)
    image = imageio.imread(filename,)
    writer.append_data(image)

我感谢建议enter image description here

python matplotlib gif animated-gif colorbar
1个回答
0
投票

'levels'参数(作为整数)将仅提供级别数,但始终根据数据缩放。要设置要映射的指定范围的数据,可以提供等距数据的自定义数组。数组的长度将对应于级别数。

根据您的情况,应将电平更改为levels = np.linspace(min_value, max_value, <number of levels>),而不是范围功能。

EDIT(提供示例):

import xarray as xr
import os, glob
import imageio

png_dir = '<your_directory>'
airtemps = xr.tutorial.open_dataset('air_temperature')

# Plots with variable (scaling) colorbar
for i in np.arange(25):
    plt.figure()
    plt.contourf(airtemps.air[i,:,:], levels = 25), plt.colorbar()
    plt.savefig(png_dir + 'air_temp_' + str(i) +'.png')    

max_temp = airtemps.air[:25,:,:].max()
min_temp = airtemps.air[:25,:,:].min()  

# Plots with Fixed colorbar    
for i in np.arange(25):
    plt.figure()
    plt.contourf(airtemps.air[i,:,:], levels = np.linspace(min_temp,max_temp,25)), plt.colorbar()
    plt.savefig(png_dir + 'fixed_cb_air_temp_' + str(i) +'.png')

variable_cb_images = glob.glob(png_dir + 'air*')
fixed_cb_images = glob.glob(png_dir + ('fix*'))  

var = [imageio.imread(file) for file in variable_cb_images]
fix = [imageio.imread(file) for file in fixed_cb_images]

imageio.mimsave(png_dir + '/movie_variable_cb.gif', var, fps = 10)
imageio.mimsave(png_dir + '/movie_fixed_cb.gif', fix, fps = 10)

Variable Color Bar

Fixed Color Bar

© www.soinside.com 2019 - 2024. All rights reserved.