A minimal GUI for a quick view of netCDF files. Aiming to be a drop-in replacement for ncview and panoply.
ncvue
is a minimal GUI for a quick view of netCDF files. It is
aiming to be a drop-in replacement for ncview and panoply, being
slightly more general than ncview targeting maps but providing
animations, zooming and panning capabilities unlike panoply. If
ncvue
is used with maps, it supports mostly structured grids, more
precisely the grids supported by cartopy.
ncvue
is a Python script that can be called from within Python or
as a command line tool. It is not supposed to produce
publication-ready plots but rather provide a quick overview of the
netCDF file(s).
The complete documentation for ncvue
is available from:
https://mcuntz.github.io/ncvue/
ncvue
is an application written in Python. If you have Python
installed, then the best is to install ncvue
within the Python
universe. The easiest way to install ncvue
is thence via pip:
python -m pip install ncvue
or using Conda:
conda install -c conda-forge ncvue
ncvue
uses CustomTkinter if it is installed. CustomTkinter is
not on Conda. ncvue
can also use xarray to open netCDF files if
it is installed. If you also want to open multiple files with xarray
(xarray.open_mfdataset), dask needs to be installed. One can
install CustomTkinter with pip on Conda, which works well except for
Linux.
python -m pip install dask xarray customtkinter
or:
conda install -c conda-forge dask xarray
Sometimes tkinter is not enabled in the system's Python version. One
has to do, for example, sudo apt install python3-tk
on Linux or
brew install python3 python-tk
on macOS with Homebrew.
We also provide standalone applications for Windows and macOS that
come with everything needed to run ncvue
including Python:
- ncvue 6.1.dev4 Windows
- ncvue 6.0 CTk Intel and ncvue 6.0 CTk ARM for Intel and ARM processors, resp., for macOS 15 [Sequoia] using CustomTkinter
- ncvue 6.0 Intel and ncvue 6.0 ARM for Intel and ARM processors, resp., for macOS 15 [Sequoia] in Aqua look
Older versions are:
- ncvue 5.1 CTk Intel and ncvue 5.1 CTk ARM for Intel and ARM processors, resp., for macOS 14 and 15 [Sonoma, Sequoia] using CustomTkinter
- ncvue 5.1 Intel and ncvue 5.1 ARM for Intel and ARM processors, resp., for macOS 14 and 15 [Sonoma, Sequoia] in Aqua look
- ncvue 4.0 for macOS 10.x with Intel processor
ncvue 4.0 should work from macOS 10.13 (High Sierra) onward on Intel processors. ncvue > 5.0 is either for Intel processors or for Apple Silicon (ARM) chips. It comes in the standard Aqua look or uses the CustomTkinter UI-library. The apps > v5.0 are notarized by Apple and might take a short while on first opening.
ncvue
can be run from the command line:
ncvue
ncvue netcdf_file.nc
ncvue netcdf_file1.nc netcdf_file2.nc
A new netCDF file can be opened from within ncvue
using the
buttons Open File. or Open xarray.
One can also use xarray to open the netCDF file(s) using the command line option -x or the button Open xarray:
ncvue -x netcdf_file.nc
ncvue -x netcdf_file1.nc netcdf_file2.nc
ncvue
either analyses the netCDF file looking for unlimited
dimensions, longitude, latitude, and treats datetime variables, or
lets xarray do the job. The real difference between using or not
using xarray is in case of several input files: the files will be
opened as a single dataset with xarray.open_mfdataset if xarray is
used. The files will be combined by xarray's coordinates. This
requires dask to be installed. The files are treated like groups of a
single netCDF file if xarray is not used. This allows the comparison
of different files in scatter plots, for example.
One can set another missing value on the command line on top of the _FillValue and missing_value attributes:
ncvue -m '-9999' netcdf_file.nc
The command line option -h gives a quick usage message.
ncvue
can be called from within Python; the filenames have to be
given in a list then:
from ncvue import ncvue
ncvue(['netcdf_file.nc'])
Note, ncvue
uses the TkAgg backend of matplotlib. It must be
called before any other call to matplotlib. This also means that you
cannot launch it from ipython --pylab. It can be called from within
a standard iPython, though, or using ipython --gui tk.
On opening, ncvue
presents three panels for different plotting
types: Scatter or Line plots, Contour plots, and Maps. This is the
look in macOS light mode:
All three panes are organised in this fashion: the plotting canvas, the Matplotlib navigation toolbar and the pane, where one can choose the plotting variables and dimensions, as well as plotting options. You can always choose another panel on top, and open another, identical window for the same netCDF file(s) with the button "New Window" on the top right.
If CustomTkinter is installed, then the general layout looks like:
or in dark mode:
CustomTkinter does not work well with Conda.
If ncvue
detects latitude and longitude variables with a size
greater than 1, it opens the Map panel by default. This is the Map
panel on macOS, describing all buttons, sliders, entry boxes,
spinboxes, and menus:
If it happens that the detection of latitudes and longitudes did not work automatically, you can choose the correct variables manually. Or you might also leave the latitudes and longitudes empty, which uses then the indexes, and one can hence display the matrix within the netCDF file(s). You might want to switch off the coastlines in this case.
You might want to switch off the automatically detected "global" option sometimes if your data is on a rotated grid, or if you want to exclude some regions such as below minus -60 °S.
All dimensions can be set from 0 to the size of the dimension-1, to "all", or to any of the arithmetic operators "mean", "std" (standard deviation), "min", "max", "ptp" (point-to-point amplitude, i.e. max-min), "sum", "median", "var" (variance).
Be aware that the underlying cartopy/matplotlib may (or may not) need a long time to plot the data (with the pseudocolor 'mesh' option) if you change the central longitude of the projection to anything else than the central longitude of your data, which is automatically detected if "central lon" is set to None. Setting "central lon" to the central longitude of the input data normally eliminates the problem.
If ncvue
does not detect latitude and longitude variables with a
size greater than 1, it opens the Scatter/Line panel by default. This
is the Scatter/Line panel in macOS dark mode (Aqua look), describing
all buttons, sliders, entry boxes, spinboxes, and menus:
The default plot is a line plot with solid lines (line style 'ls' is '-'). One can set line style 'ls' to None and set a marker symbol (marker), e.g. 'o' for circles, to get a scatter plot. A large variety of line styles, marker symbols, and color notations are supported. They are listed in the tooltips that appear if you hove longer than 0.5 s above an entry field.
ncvue
builds automatically a datetime variable from the time
axis. This is correctly interpreted by the underlying matplotlib also
when zooming or panning the axes. But it is also much slower than
using the index. Leaving x empty uses the index for the x-axis and
is very fast. Plotting a line plot with 52608 time points takes about
2.2 s on my MacBook Pro using the datetime variable and about 0.3 s
using the index (i.e. empty x-variable). This is especially true if
one plots multiple lines with 'all' entries from a specific
dimension. Plotting all 10 depths of soil water content for the 52608
time points, as in the example below, takes also about 0.3 s if using
the index as x-variable but more than 11.1 s when using the datetime
variable.
The last panel provide by ncvue
draws contour plots. This is the
Contour panel in macOS dark mode, describing all buttons, sliders,
entry boxes, spinboxes, and menus:
This produces also either pseudocolor plots ('mesh' ticked) or filled contour plots ('mesh' unticked) just as the Map panel but without any map projection.
ncvue
is distributed under the MIT License. See the LICENSE file
for details.
Copyright (c) 2020-2025 Matthias Cuntz
ncvue
uses CustomTkinter if installed. Otherwise it uses the
Azure 2.0 theme by rdbende on Linux and Windows.
Standalone applications are produced with cx_Freeze, currently maintained by Marcelo Duarte.
The project structure of ncvue
was very originally based on a
template provided by Sebastian Müller but has evolved
considerably since.
Different netCDF test files were provided by Juliane Mai.