文:张利东
公众号:DongTalks
1. 缘起
记得上次研究matplotlib的时候就被subplot和axes搞的晕头转向的。这次又遇到这个问题,决定无论如何也要消灭。
2. 行动
上官网查了下,感觉subplot和axes没有太大本质的区别,都是Axes基类的子类。用add_subplot()方法返回的是matplotlib.axes._subplots.AxesSubplot object
,用add_axes()方法返回的是matplotlib.axes._axes.Axes object
。
Github的官方教程里面写到
The Figure is the top-level container in this hierarchy. It is the overall window/page that everything is drawn on. You can have multiple independent figures and Figures can contain multiple Axes.
Most plotting ocurs on an Axes. The axes is effectively the area that we plot data on and any ticks/labels/etc associated with it. Usually we'll set up an Axes with a call to subplot (which places Axes on a regular grid), so in most cases, Axes and Subplot are synonymous.
也就是说,主要操作都是在axes上,axes可以通过调用subplot(方法?)生成,所以两者大多数人情况下是同义词。
大多数情况下相同,那区别呢?继续查找,在StackOverflow上找到一个解释挺好
Both, add_axes and add_subplot add an axes to a figure. They both return a matplotlib.axes.Axes object.
However, the mechanism which is used to add the axes differs substantially.
大致意思是
- subplot返回的AxesSubplot,是在Axes对象上进行了一些基本的预处理,把诸如边框、间距等都根据数据进行了调整,可以直接拿来用;
- subplot是根据subplotgrid来定位,能快速生成几行几列之类的子图;axes是根据相对坐标轴的比例来定位,更灵活更强大,也就需要更多的人工操作;
至此,绝大部分问题解决。
3. 思考
王兴在饭否里说过的一段话挺有意思
一个不会游泳的人老换游泳池是不能解决问题的。
回想自己玩编程这些年,每每遇到难关尝试了几次没能解决,就琢磨着是不是换门语言更好,其实就是想靠换泳池学会游泳。如果那会儿能拿出现在这种不达目的不罢休的劲头,想来也不至于直到现在也还是菜鸟水平了罢。
4. 参考文献
- matplotlib - AnatomyOfMatplotlib,matplotlib
- What are the differences between add_axes and add_subplot?,Stack Overflow