Source code for SEAScope.lib.plots

# vim: set ts=4:sts=4:sw=4
#
# @author: <sylvain.herledan@oceandatalab.com>
#
# This file is part of SEAScope, a 3D visualisation and analysis application
# for satellite, in-situ and numerical model data.
#
# Copyright (C) 2014-2023 OceanDataLab
#
# SEAScope is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# SEAScope is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with SEAScope. If not, see <https://www.gnu.org/licenses/>.

"""
This module provides methods for plotting the data extracted by SEAScope.
"""

import logging

logger = logging.getLogger(__name__)


[docs] def plot_2d_data(source_name, field_name, field_data, output_path): """Plot data extracted by SEAScope using a polygon. Parameters ---------- source_name : str Name of the source (granule) data has been extracted from field_name : str Name of the extracted field field_data : numpy.array Extracted data (for a single field/channel) output_path : str Path of the file wherein the plot will be saved """ import matplotlib import matplotlib.pyplot slice_size = 100 slices = range(0, len(source_name), slice_size) wrapped_srcname = [source_name[i:i+slice_size] for i in slices] fig = matplotlib.pyplot.figure(1, figsize=(10, 10), dpi=300) ax = fig.add_axes([0, 0, 1, 1], visible=True) ax.set_axis_off() matplotlib.pyplot.figtext(.5, 1.0, '\n'.join(wrapped_srcname), fontsize=10, ha='center', figure=fig) matplotlib.pyplot.figtext(.5, 0.95, field_name, fontsize=16, ha='center', figure=fig) _cmap = matplotlib.pyplot.get_cmap('jet') ax.imshow(field_data, cmap=_cmap, interpolation='nearest') fig.savefig(output_path, bbox_inches='tight') matplotlib.pyplot.close()
[docs] def plot_transect(dists, transects, output_path): """Plot data extracted by SEAScope using a polyline (transect). Parameters ---------- dists : :obj:list of :obj:float Cumulative distance from origin to each point of the transect, in kilometers transects: :obj:dict Values extracted along the polyline for each (granule, field) pair output_path : str Path of the file wherein the plot will be saved """ import matplotlib import matplotlib.pyplot cmap = matplotlib.pyplot.get_cmap('hsv', 1 + len(transects.keys())) fig = matplotlib.pyplot.figure(1, figsize=(10, 10), dpi=300) ax = fig.add_axes([0, 0, 1, 1], visible=True) ax.set_xlabel('Distance (km)') k = 0 for uri in transects: slice_size = 120 slices = range(0, len(uri), slice_size) wrapped_uri = [uri[i:i+slice_size] for i in slices] ax.plot(dists, transects[uri], c=cmap(k), label='\n'.join(wrapped_uri)) k = k + 1 legend = matplotlib.pyplot.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, ncol=1, mode="expand", borderaxespad=0.) matplotlib.pyplot.setp(legend.get_title(), fontsize='xx-small') fig.savefig(output_path, bbox_inches='tight') matplotlib.pyplot.close()