使用fix colorbar制作多个xarray绘图的干净高质量GIF

2024-04-19 07:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一个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)

我很感激你的建议。你知道吗


Tags: image绘图颜色savedir数字filenamegif
2条回答

我用PIL代替imageio来读取数字和制作GIF,现在颜色一致了!你知道吗

from PIL import Image  
img, *imgs = [Image.open(f) for f in fns_image]
img.save(fp=save_gif_dir+gif_name+'1.gif', format='GIF', append_images=imgs,
     save_all=True, duration=200, loop=0)

“levels”参数(作为整数)只提供级别数,但始终按数据缩放。要设置要映射的指定数据范围,可以提供等距数据的自定义数组。数组的长度将与级别数相对应。你知道吗

对于您的情况,应该将levels更改为levels = np.linspace(min_value, max_value, <number of levels>),而不是range函数。你知道吗

编辑可复制示例:

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

相关问题 更多 >