Mapa de NetCDF com xarray e Cartopy

Os arquivos no formato NetCDF (Network Common Data Form) são muito utilizados para armazenamento de dados científicos, permitindo criação e acesso de mapas com várias coordenadas (como latitude, longitude, níveis verticais, tempo, etc). O Python possui bibliotecas para trabalhar com esses dados, como o netCDF4 e o xarray. O Cartopy também é um pacote Python projetado para processamento de dados geoespaciais a fim de produzir mapas, integrado com o pacote Matplotlib, e outras análises.

Mapa gerado com os dados e script do post
Mapa gerado com os dados e script do post

O script a seguir faz uso de um arquivo de exemplo do site da Unidata (membro dos Programas Comunitários da UCAR, University Corporation for Atmospheric Research), que deve ser baixado e salvo na mesma pasta do script – ou especificar o nome e caminho. Comentários ao longo do código explicam as linhas utilizadas. Baseado nesse tutorial de NetCDF.

Os parâmetros ‘vmin’ e ‘vmax’ indicam os limites da barra de cores, que podem ser fixos também – interessante para padronizar vários mapas. Para uma escala de cores (“colormap”) com mais variações, use “cmap = ‘gist_ncar'”. Para discretizar, adicione o parâmetro ‘levels=ALGUM_NÚMERO’.

#!/usr/bin/env python3.7.9
# -*- Coding: UTF-8 -*-

import matplotlib.pyplot as plt # standard graphics library
import xarray as xr
import cartopy.crs as ccrs # cartographic coordinate reference system
import cartopy.feature as cfeature # features such as land, borders, coastlines

# Input variables
var_name = 'tas' # air temperature at surface
file_in = 'sresa1b_ncar_ccsm3-example.nc'
file_out = 'map_{0}.png'.format(var_name)

# Open the file as an xarray Dataset and display the metadata
ds = xr.open_dataset(file_in)
# Select DataArray from variable
da = ds[var_name]

plt.figure(dpi = 100) # open a new figure window and set the resolution
ax = plt.axes(projection = ccrs.Mercator())
ax.coastlines() # use the default low-resolution coastline
gl = ax.gridlines(draw_labels = True) # label all axes
gl.top_labels = False # turn off top label
gl.right_labels = False # turn off right label
da.plot(x = 'lon', y = 'lat',\
cmap = 'jet', vmin = da.min(), vmax = da.max(),\
transform = ccrs.PlateCarree())
plt.title(var_name)
#plt.show()
plt.savefig(file_out,bbox_inches='tight') # Save image as PNG file without large white borders

Para executar o script em um terminal Linux, copie o código para um editor de texto simples (como o bloco de notas) e salve o arquivo com um nome terminado com “.py”, para então executar o comando “python NOME_DO_SCRIPT.py”.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.