1

In Matplotlib, in many drawing and configuration methods, you can set the zorder keyword to determine which elements are drawn on top of which ones. Now, my application would require a specific kind of handling or zorder as follows:

  • Element A is drawn on top of element B
  • Element B is drawn on top of element C
  • Element C is drawn on top of element A

in a cyclic manner, like in rock-paper-scissors (A on top of B on top of C on top of A ------- Rock beats Scissors beats Paper beats Rock). I.e. there is no absolute zorder, but only pairwise.

  • Element A is ax.imshow
  • Element B is ax.fill_between
  • Element C is ax.grid

In addition, element D is a plot drawn on top of everything else, but that is easy to implement when the rest is working.

Particularly, Element C i.e. the grid should be below everything except element B, the fill_between, which however should cover element A, the imshow

from matplotlib import pyplot as plt
import matplotlib.figure

fig = matplotlib.figure.Figure()
ax = fig.subplots()

x, y, X = ... # some data, details do not matter here

ax.plot(x, y, zorder=???)                                          # Element D
ax.imshow(X, ..., zorder=???)                                      # Element A
ax.fill_between(x, y, zorder=???)                                  # Element B
ax.set_axisbelow(True) # Set True or False, does it matter?
ax.grid(..., zorder=???)                                           # Element C

For details and context, this is related to Matplotlib - color under curve based on spectral color where a grid should be below the rainbow but above the white area.

Riikka
  • 11
  • 2

0 Answers0