Source code for pyrfu.plot.plot_reduced_2d
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
# 3rd party imports
import numpy as np
from matplotlib import colors
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def plot_reduced_2d(ax, f2d, clim: list = None):
r"""Plot the 2D recuded distribution `f2d` onto the axis `ax`.
Parameters
----------
ax : matplotlib.axes._subplots.AxesSubplot
Axis.
f2d : xarray.DataArray
2D reduced distribution.
clim : list of floats, Optional
Coloraxis limits.
Returns
-------
ax : matplotlib.axes._subplots.AxesSubplot
Axis.
cax : matplotlib.axes._axes.Axes
Colorbar axis.
"""
if clim is None:
clim = [1e-13, 1e-8]
clim_log = np.log10(clim)
n_levs = int(np.round(clim_log[1]) - np.round(clim_log[0])) + 1
im = ax.pcolormesh(
f2d.vx.data,
f2d.vy.data,
np.transpose(f2d.data),
norm=colors.LogNorm(vmin=clim[0], vmax=clim[1]),
cmap="Spectral_r",
rasterized=True,
shading="auto",
)
c_lines = ax.contour(
f2d.vx.data,
f2d.vy.data,
np.transpose(f2d.data),
levels=np.logspace(clim_log[0], clim_log[1], n_levs),
norm=colors.LogNorm(vmin=clim[0], vmax=clim[1]),
cmap="viridis",
)
vx_lim = np.max(abs(f2d.vx.data))
vy_lim = np.max(abs(f2d.vy.data))
ax.set_xlim(np.array([-vx_lim, vx_lim]))
ax.set_ylim(np.array([-vy_lim, vy_lim]))
ax.set_aspect("equal")
f = plt.gcf()
pos = ax.get_position()
cax = f.add_axes([pos.x0, pos.y0 + pos.height + 0.01, pos.width, 0.01])
cbar = f.colorbar(mappable=im, cax=cax, ax=ax, orientation="horizontal")
cbar.add_lines(c_lines)
cax.xaxis.tick_top()
cax.xaxis.set_label_position("top")
return ax, cax