Visualization#

Using cyclic colormaps#

import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

from quantify_core.visualization.mpl_plotting import set_cyclic_colormap

zvals = xr.DataArray(np.random.rand(6, 10) * 360)
zvals.attrs["units"] = "deg"
zvals.plot()
<matplotlib.collections.QuadMesh at 0x7d65177c75b0>
../_images/1620718fee58368f59fcfdc3acff8160b4556c46c5b6c64c3b74dc91babe9a56.png
fig, ax = plt.subplots(1, 1)
color_plot = zvals.plot(ax=ax)
set_cyclic_colormap(color_plot)
../_images/1c9a54ce2e59472afa15eaad3f6085520938962e8bcf438039ba8976fa5e62f1.png
zvals_shifted = zvals - 180

fig, ax = plt.subplots(1, 1)
color_plot = zvals_shifted.plot(ax=ax)
ax.set_title("Shifted cyclic colormap")
set_cyclic_colormap(color_plot, shifted=zvals_shifted.min() < 0)
../_images/f7623e7a2c3158ae105930d585ae5105cbb8f9eab334969257a28a7ab2d1dcf5.png
fig, ax = plt.subplots(1, 1)
color_plot = (zvals / 2).plot(ax=ax)
ax.set_title("Overwrite clim")
set_cyclic_colormap(color_plot, clim=(0, 180), unit="deg")
../_images/be2599fd24da42aa00128cdb2da4afe7db6e97081fd6519a4ed9e538c0195750.png
fig, ax = plt.subplots(1, 1)
zvals_rad = zvals / 180 * np.pi
zvals_rad.attrs["units"] = "rad"
color_plot = zvals_rad.plot(ax=ax)
ax.set_title("Radians")
set_cyclic_colormap(color_plot, unit=zvals_rad.units)
../_images/f4d319d14b63c94244ea54fe5810a5aaee40eaba144e4db965687d120b501187.png

Creating custom colormaps#

In this example we use this function to create a custom colormap using several base colors for which we adjust the saturation and transparency (alpha, only visible when exporting the image).

import colorsys

import matplotlib.colors as mplc
import matplotlib.pyplot as plt
import numpy as np

from quantify_core.visualization.color_utilities import set_hlsa

color_cycle = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728"]
all_colors = []
for col in color_cycle:
    hls = colorsys.rgb_to_hls(*mplc.to_rgb(mplc.to_rgb(col)))
    sat_vals = (np.linspace(0.0, 1.0, 20) ** 2) * hls[2]
    alpha_vals = np.linspace(0.4, 1.0, 20)

    colors = [
        list(set_hlsa(col, s=s)) for s, a in zip(sat_vals, alpha_vals)
    ]
    all_colors += colors

cmap = mplc.ListedColormap(all_colors)

np.random.seed(19680801)
data = np.random.randn(30, 30)

fig, ax = plt.subplots(1, 1, figsize=(6, 3), constrained_layout=True)

psm = ax.pcolormesh(data, cmap=cmap, rasterized=True, vmin=-4, vmax=4)
fig.colorbar(psm, ax=ax)
plt.show()
../_images/13e837e5c6a255104650c8a7c8929d2e9c35afe481867bb8aafd55c5dfe4a289.png