I have no objections to these ways of creating axes, but the matplotlib "standard" way to specify a custom projection is here:

http://matplotlib.org/devel/add_new_projection.html#creating-a-new-projection

```
ax = plt.subplot(projection=wcs.WCS('image.fits'))
```

The docs there describe how to add hooks to a class to make this work.