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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为多个Xarray图制作带有固定颜色条的干净高质量GIF相关的知识,希望对你有一定的参考价值。

我想从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

答案

'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

以上是关于为多个Xarray图制作带有固定颜色条的干净高质量GIF的主要内容,如果未能解决你的问题,请参考以下文章

在matplotlib中绘制频谱图颜色条的问题[重复]

Python:带颜色条的条形图

使用 HTML5 和 Javascript 录制/上传带有进度条的固定长度视频

如何为地理视图(散景)创建自定义颜色图?

如何快速制作带有约束的动画?

带有不透明条的直方图