I was frustrated with how difficult I found making animations in matplotlib so I wrote something to make it easy and called it celluloid. I found the idea in plotnine and simply took out the plotnine specific code and generalized it some more (adding support for subplots).
The goal is that your visualization code shouldn't need to modified at all or as little as possible. With celluloid you take "photos" of your visualization to create each frame. Once all the frames have been captured you can create an animation with one call. The readme has more details.