Source code for pyrfu.plot.plot_surf
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
# 3rd party imports
import numpy as np
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def plot_surf(axis, x, y, z, c, cmap, norm, cax_pos: str = "bottom"):
r"""Plots surface.
Parameters
----------
axis : matplotlib.axes._subplots.Axes3DSubplot
Axis to plot.
x : ndarray
X axis meshgrid.
y : ndarray
Y axis meshgrid.
z : ndarray
Z axis meshgrid.
c : ndarray
C axis meshgrid.
cmap : matplotlib.colors.ListedColormap
Colormap
norm : matplotlib.colors.Normalize
Normalization.
cax_pos : {"bottom", "top", "left", "right"}, Optional
Position of the colorbar with respect to the axis. Default is "bottom".
Returns
-------
axis : matplotlib.axes._subplots.Axes3DSubplot
Axis with surface.
caxis : matplotlib.axes._axes.Axes
Colorbar axis.
"""
axis.plot_surface(x, y, z, facecolors=cmap(norm(c)))
mappable = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
mappable.set_array(np.array([]))
f = plt.gcf()
pos = axis.get_position()
if cax_pos == "bottom":
caxis = f.add_axes([pos.x0, pos.y0 - 0.01, pos.width, 0.01])
f.colorbar(
mappable=mappable,
cax=caxis,
ax=axis,
orientation="horizontal",
)
elif cax_pos == "top":
caxis = f.add_axes(
[pos.x0, pos.y0 + pos.height + 0.01, pos.width, 0.01],
)
f.colorbar(
mappable=mappable,
cax=caxis,
ax=axis,
orientation="horizontal",
)
caxis.xaxis.set_ticks_position("top")
caxis.xaxis.set_label_position("top")
elif cax_pos == "left":
caxis = f.add_axes([pos.x0 - 0.01, pos.y0, 0.01, pos.height])
f.colorbar(mappable=mappable, cax=caxis, ax=axis)
caxis.yaxis.set_ticks_position("left")
caxis.yaxis.set_label_position("left")
elif cax_pos == "right":
caxis = f.add_axes(
[pos.x0 + pos.width + 0.01, pos.y0, 0.01, pos.height],
)
f.colorbar(mappable=mappable, cax=caxis, ax=axis)
else:
raise ValueError("Invalid caxis position")
return axis, caxis