athenakit.vis

Visualization utilities, including bipolar jet plotting helpers.

Bipolar

Hot/cold colormap for diverging data.

Copyright 2012 endolith at gmail com Copyright 2009 Ged Ridgway at gmail com

Translation and modification of http://www.mathworks.com/matlabcentral/fileexchange/26026-bipolar-colormap

Based on Manja Lehmann’s hand-crafted colormap for cortical visualisation

athenakit.vis.bipolar.bipolar(lutsize=256, neutral=0.3333333333333333, interp=None)[source]

Bipolar hot/cold colormap, with neutral central color.

This colormap is meant for visualizing diverging data; positive and negative deviations from a central value. It is similar to a “hot” blackbody colormap for positive values, but with a complementary “cold” colormap for negative values.

Parameters:
  • lutsize (int) – The number of elements in the colormap lookup table. (Default is 256.)

  • neutral (float) – The gray value for the neutral middle of the colormap. (Default is 1/3.) The colormap goes from cyan-blue-neutral-red-yellow if neutral is < 0.5, and from blue-cyan-neutral-yellow-red if neutral > 0.5. For shaded 3D surfaces, a neutral near 0.5 is better, because it minimizes luminance changes that would otherwise obscure shading cues for determining 3D structure. For 2D heat maps, a neutral near the 0 or 1 extremes is better, for maximizing luminance change and showing details of the data.

  • interp (str or int, optional) – Specifies the type of interpolation. (‘linear’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic, ‘cubic’) or as an integer specifying the order of the spline interpolator to use. Default is ‘linear’ for dark neutral and ‘cubic’ for light neutral. See scipy.interpolate.interp1d.

Returns:

out – The resulting colormap object

Return type:

matplotlib.colors.LinearSegmentedColormap

Examples

>>> from mpl_toolkits.mplot3d import Axes3D
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from bipolar import bipolar
>>> x = y = np.arange(-4, 4, 0.15)
>>> x, y = np.meshgrid(x, y)
>>> z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
>>> fig, axs = plt.subplots(2, 2, figsize=(12, 8),
...                         subplot_kw={'projection': '3d'})
>>> for ax, neutral in (((0, 0), 1/3),  # Default
...                     ((0, 1), 0.1),  # Dark gray as neutral
...                     ((1, 0), 0.9),  # Light gray as neutral
...                     ((1, 1), 2/3),
...                     ):
...     surf = axs[ax].plot_surface(x, y, z, rstride=1, cstride=1,
...                                 vmax=abs(z).max(), vmin=-abs(z).max(),
...                                 cmap=bipolar(neutral=neutral))
>>>     axs[ax].set_title(f'{neutral:.3f}')
...     fig.colorbar(surf, ax=axs[ax])
>>> plt.show()

References

athenakit.vis.bipolar.hotcold(lutsize=256, neutral=0.3333333333333333, interp=None)[source]

Bipolar hot/cold colormap, with neutral central color.

This colormap is meant for visualizing diverging data; positive and negative deviations from a central value. It is similar to a “hot” blackbody colormap for positive values, but with a complementary “cold” colormap for negative values.

Parameters:
  • lutsize (int) – The number of elements in the colormap lookup table. (Default is 256.)

  • neutral (float) – The gray value for the neutral middle of the colormap. (Default is 1/3.) The colormap goes from cyan-blue-neutral-red-yellow if neutral is < 0.5, and from blue-cyan-neutral-yellow-red if neutral > 0.5. For shaded 3D surfaces, a neutral near 0.5 is better, because it minimizes luminance changes that would otherwise obscure shading cues for determining 3D structure. For 2D heat maps, a neutral near the 0 or 1 extremes is better, for maximizing luminance change and showing details of the data.

  • interp (str or int, optional) – Specifies the type of interpolation. (‘linear’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic, ‘cubic’) or as an integer specifying the order of the spline interpolator to use. Default is ‘linear’ for dark neutral and ‘cubic’ for light neutral. See scipy.interpolate.interp1d.

Returns:

out – The resulting colormap object

Return type:

matplotlib.colors.LinearSegmentedColormap

Examples

>>> from mpl_toolkits.mplot3d import Axes3D
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from bipolar import hotcold
>>> x = y = np.arange(-4, 4, 0.15)
>>> x, y = np.meshgrid(x, y)
>>> z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
>>> fig, axs = plt.subplots(2, 2, figsize=(12, 8),
...                         subplot_kw={'projection': '3d'})
>>> for ax, neutral in (((0, 0), 1/3),  # Default
...                     ((0, 1), 0.1),  # Dark gray as neutral
...                     ((1, 0), 0.9),  # Light gray as neutral
...                     ((1, 1), 2/3),
...                     ):
...     surf = axs[ax].plot_surface(x, y, z, rstride=1, cstride=1,
...                                 vmax=abs(z).max(), vmin=-abs(z).max(),
...                                 cmap=hotcold(neutral=neutral))
>>>     axs[ax].set_title(f'{neutral:.3f}')
...     fig.colorbar(surf, ax=axs[ax])
>>> plt.show()

References