Source code for pyrfu.plot.plot_line

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 3rd party imports
import matplotlib as mpl
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np
import xarray as xr

__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"


[docs]def plot_line(axis, inp, **kwargs): r"""Line plot of time series. Parameters ---------- axis : matplotlib.axes._axes.Axes Single axis where to plot inp. If None creates a new figure with a single axis. inp : xarray.DataArray Time series to plot Other Parameters ---------------- **kwargs Keyword arguments control the line properties. See matplotlib.lines.Line2D for reference. Returns ------- axs : matplotlib.axes._axes.Axes Axis with matplotlib.lines.Line2D. """ if axis is None: _, axis = plt.subplots(1) else: if not isinstance(axis, mpl.axes.Axes): raise TypeError("axis must be a matplotlib.axes._axes.Axes") if not isinstance(inp, xr.DataArray): raise TypeError("inp must be an xarray.DataArray object!") if inp.data.ndim < 3: data = inp.data elif inp.data.ndim == 3: data = np.reshape( inp.data, (inp.shape[0], inp.shape[1] * inp.shape[2]), ) else: raise NotImplementedError( f"plot_line cannot handle {inp.data.ndim} dimensional data" ) time = inp.time axis.plot(time, data, **kwargs) if time.dtype == "<M8[ns]": locator = mdates.AutoDateLocator(minticks=3, maxticks=7) formatter = mdates.ConciseDateFormatter(locator) axis.xaxis.set_major_locator(locator) axis.xaxis.set_major_formatter(formatter) axis.grid(True, which="major", linestyle="-", linewidth="0.2", c="0.5") axis.yaxis.set_major_locator(mticker.MaxNLocator(4)) return axis