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)