Dear Nick

You should be able to achieve this using the .frb attribute of any slice plot object (or projection plot actually).

def combine_by_value(a: np.ndarray, b: np.ndarray) -> np.ndarray:

    """Combine two RGB(a) arrays into one.
    a : RGBa array
        The array to take the value from. This works well if a is in gray scales
    b : RGBa array
        The array to take hue and saturation from.

    c : RGB array
        An array with hue and saturation from b and value from a.
    # Note: rgb_to_hsv only accepts RGB arrays, not RGBa ones so we need to strip out the alpha channel
    a_hsv, b_hsv = (plt.matplotlib.colors.rgb_to_hsv(_[..., :3]) for _ in (a, b))

    # We get the saturation from a and the hue/value from b
    c_hsv = b_hsv.copy()

    c_hsv[..., 2] = a_hsv[..., 2]
    return plt.matplotlib.colors.hsv_to_rgb(c_hsv)

p = yt.SlicePlot(ds, …)
dens = p.frb["gas", "density"]  # this will be the 2D array that would have been plotted otherwise
neutral = p.frb["gas", "neutral_fraction"]  # or whatever name your field has

fig, ax = plt.subplots()
norm = plt.matplotlib.colors.LogNorm

# Apply colour maps to our two fields
dens_colors =
neutral_colors =

# Now we mix them
combined_colors = combine_by_luminosity(dens_colors, neutral_colors)
## You could also do something like
# combined_colors = (dens_colors + neutral_colors) / 2

On 04/03/2022 01:32, Nick Gnedin wrote:

I wonder if I can plot slices of two fields overlaid, with the top field being partially translucent, so that the bottom field is also visible. Specifically, I would like to show gas density in greyscale, overlaid with the neutral fraction with low opacity and a sequential cmap like "Oranges", then the relation between the gas density and ionized regions will be very visible.

yt-users mailing list --
To unsubscribe send an email to
Member address: