Reading a NetCDF file with Python, Matlab and R

Visualisation tools

There are several turn-key desktop tools designed to data and image visualization of a NetCDF file like:

  •  Panoply designed essentially for NetCDF files that use the Climate Forecast conventions metadata
  • HDFview : able to open all NetCDF (and HDF) files

Language

In the following examples, the NetCDF file downloadable here is used.

PYTHON

1. Using the netCDF4 library:

# First, you need to install the netCDF4 library if you haven’t already
# pip install netCDF4

import netCDF4 as nc

# Specify the file path
file_path = 'sresa1b_ncar_ccsm3-example.nc'

# Open the NetCDF file
ds = nc.Dataset(file_path)

# Print the file details
print(ds)

# Access a specific variable
tas = ds.variables['tas'][:]

# Check the dimensions and attributes of the variable
print(ds.variables['tas'].dimensions)
print(ds.variables['tas'].shape)
print(ds.variables['tas'].units)

# Close the dataset after using it
ds.close()

2. Using the xarray library:

# Install xarray and netCDF4 together if you haven’t done so
# pip install xarray netCDF4

import xarray as xr

# Open the NetCDF file using xarray
ds = xr.open_dataset('sresa1b_ncar_ccsm3-example.nc')

# Print the dataset details
print(ds)

# Access a specific variable
tas = ds['tas']

# Print the values of the lat variable
print(tas.values)

# You can also access dimensions and coordinates
print(ds.dims)
print(ds.coords)

# Close the dataset (optional, handled automatically with xarray)
ds.close()

MATLAB

file_name = 'sresa1b_ncar_ccsm3-example.nc';
var_name = 'tas';
group_name = '/grid2/';
tmp = var_name;  % or tmp = group_name
 
% Display global information about a netcdf file
ncdisp(file_name);
% About a variable or a group
ncdisp(file_name, tmp);
% In the specified format 'full' or 'min'
ncdisp(file_name, tmp, 'min')
   

% Get information about a netcdf file info = ncinfo(file_name) % About a variable var_info = ncinfo(file_name, var_name) % About a group gr_info = ncinfo(file_name, group_name)     % Read data from a vraiable of a netcdf file data = ncread(file_name, var_name); % Or % data = ncread(file_name, var_name, start, count, stride)     % Read attribute attr = ncreadatt(file_name, '/', 'creation_date') var_attr = ncreadatt(file_name, var_name, 'add_offset') gr_attr = ncreadatt(file_name, group_name, 'description')

R

#Intall the NetCDF libraries: sudo apt-get install libnetcdf-dev 
#Install the ncdf package in R: install.packages("ncdf")
 
library("ncdf")
 
filename = "sresa1b_ncar_ccsm3-example.nc"
var_name = "tas"
attr_name = "units"
 
# Open a netcdf file
fid <- open.ncdf(filename, write=FALSE)
 
# Get a netcdf file info
print(fid)
 
# Get the variable identifier
var_id <- varid.inq.ncdf(fid, var_name)
print(var_id)
 
# Get the name of a variable id 
my_var_name <- varname.inq.ncdf(fid, var_id)
print(my_var_name)
 
# Get a file attribute
attr <- att.get.ncdf(fid, 0,"creation_date")
print(attr)

# Get a variable attribute
attr_value <- att.get.ncdf(fid, var_name, attr_name)
print(attr_value)
 
# Get the size of a variable
size <- varsize.ncdf(fid, var_id)
print (size)
 
# Get dimensions of a variable
ndims <- varndims.ncdf(fid, var_id)
print (ndims)
 
# Read data from a netcdf file
data <- get.var.ncdf(fid, var_name)
print(data)
 
# Get the variable objet
var_object <- var.inq.ncdf(fid,var_id )
print(var_object)
 
# Get the name from the variable object
name <- var_object$name
print (name)
 
# Get variable object units
n_attr <- var_object[["units"]]
print(n_attr)
 
# Close a netcdf file
close.ncdf(fid)

More news

Highlights

AERIS/ICARE was migrated his good old FTP server to SFTP

For security reason, we are abandoning the FTP protocol in favor of SFTP on our distribution server. Depending of the way you are using this service, you can have to change the commands you are used to. Note that not all applications support the SFTP protocol, and some additional tools may need to be installed […]

01.03.2024

Tutorials

How to convert a matplotlib figure to a numpy array or a PIL image

Language/Format: Python
Description: For manipulating a figure build with matplotlib, it is sometimes requested to convert it in a format understandable by other python libraries. This can be useful for using scipy image filters or manually adding annotations for example.
This page details how to convert a matplotlib figure to a numpy 3D array of RGBA values, or directly to a PIL ( Python Imaging Library ) Image.
Author(s): Nicolas Pascal (ICARE)

10.02.2017

Tutorials

Writing an HDF file with C, FORTRAN, Python, MATLAB and R

Language/Format: Fortran,MATLAB,Python
Description: This page gives pieces of code to write data in an HDF4 file
Author(s): Nicolas PASCAL, Nicolas THOMAS, Aminata NDIAYE (CARE )

15.10.2014

Search