The stack has dozens of "import matplotlib" statements scattered around. This can cause unexpected behavior, slowdowns and can mess up subsequent matplot commands (e.g. if a implicit import prevents a subsequent explicit import from setting the backend).
We provide an afw.display abstraction for doing ds9-related things, so we should also have an afw.plot or similar abstraction for plotting. One could then swap in Seaborn or another plotting system more easily, and it would reduce the "import matplotlib" to one place, which would only occur when e.g. that class is instantiated.
A first step of this would be a simple class that just handles the import and environment setup, while not actually abstracting away any of the matplotlib calls. We could then make it a more general abstraction layer if desired.