Haciendo vídeos con xmovie y Python

No, no vamos a hacer ningún vídeo X subido de tono ni nada por el estilo. Vamos a hacer una animación con una biblioteca llamada xmovie que permite hacer vídeos, GIFs animados,…, a partir de estructuras de datos de xarray de forma muy sencilla.

Antes he hablado muchas veces sobre distintas formas de hacer animaciones con Python. Parece que estoy un poco monotemático pero algunas animaciones son capaces de condensar tanta información de forma tan rápidamente consumible que estoy buscando la mejor forma de hacerlo dependiendo del contexto en el que me encuentre:

Vamos al lío. Empezamos, como siempre, importando algunas cosas:

Lo que voy a animar en esta ocasión son datos de la SST (Sea Surface Temperature, agua superficial del mar) promedio anual obtenidos a partir del sensor MODIS a bordo del satélite AQUA de la Nasa. Puedes leer más aquí sobre los datos.

Los datos los voy a obtener a partir de un servidor de datos OpenDAP que me permite descargar solo lo que necesito. Los datos están a nivel global pero solo quiero mostrar información del mar Mediterráneo occidental. Para hacer el subset necesito hacer, previamente, una serie de cosas:

Tengo un fichero NetCDF por año desde el año 2002 hasta el año 2018. Los voy a descargar, leer como extructuras de datos de xarray y meterlos en una lista. Los valores x0, y0, x1 e y1 que he definido anteriormente los utilizo para hacer el subset solo para las latitudes y longitudes que necesito:

Cada uno de los objetos de datos que he metido en la lista datasets contiene valores de la SST en dos dimensiones (latitud y longitud). Quiero añadir una tercera dimensión (tiempo) con los datos de cada año. Para ello, ahora creo una nueva estructura de las disponibles en xarray pero ‘amontonando’ los datasets individuales que he almacenado anteriormente en la lista datasets para crear un nuevo xarray.Dataset con una nueva dimensión time:

Ahora que ya tenemos los datos como los quería podríamos crear la película con xmovie de la siguiente forma:

El resultado sería:

Muy bien, muy sencillo. Lo que hace la biblioteca es coger la dimensión time del objeto ds e iterar sobre la misma para crear cada fotograma.

Pero parece que el rango de temperaturas incluye cosas como lagos o ríos que están bastante más fríos que el Mediterraneo. A mí me interesa que el rango de temperaturas se restrinja más al valor del mar para resaltar más las diferencias.

No os preocupéis, podemos definir nuestra propia función y usarla para que dibuje cada fotograma. La función la tenemos que definir con tres argumentos, la figura (de matplotlib, la variable del xarray.Dataset que queremos dibujar y el número de fotogramas o pasos temporales. La nueva función y la generación del vídeo se muestra a continuación:

En la función anterior he podido definir el rango de temperaturas que quiero utilizar, más acorde con la SST promedio del mediterráneo.

El resultado sería algo como:

Y eso es todo.

La biblioteca xmovie es muy específica pero te puede resolver alguna papeleta si necesitas una animación rápida de una variable en un xarray.Dataset.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

thirty six − = 33