As you say, this was inspired by the set_axes from WMTS, because whenever you defined a new projection, it looked like you were having to do a lot of work (and poll a server) which I didn't want to do on each draw call.

I also wanted to separate the calls as I wanted to do some validation before the draw (fail early), else you end up with a deep traceback (starting in mpl.Axes.draw) which eventually tells you that the projection isn't supported.