【matplotlib】 图解pyplot figure、subplot、axes、axis的区别

基本概念

用matplotlib.pyplot绘图需要知道以下几个概念:

画图板/画布:这是一个基础载体,类似实际的画图板,用pyplot.figure()函数创建,程序中允许创建多个画图板,具体操作的画板遵循就近原则(操作是在最近一次调用的画图板上实现),缺省条件下内部默认调用pyplot.figure(1)。

图形区/绘图区:用来绘图的实际区域,一般不直接获取,直接设定方式为pyplot.axes([x, y, w, h]),即axes函数直接确定了该区域在画图板/画布中的位置为x,y 尺寸为w,h

标签区:用来展示图形相关标签的地方,一般不直接设定(未仔细研究过),该区域根据图形区进行扩展,与该区域有关联的函数是pyplot.xlabel()、pyplot.ylabel()、pyplot.title()等

以上描述如下图所示
【matplotlib】 图解pyplot figure、subplot、axes、axis的区别
对比
figure (1) VS figure()

figure()操作就是创建或者调用画图板,缺省情况下系统会创建figure(1)作为画图板。使用时遵循就近原则,所有画图操作是在最近一次调用的画图板上实现。

axes() VS subplot()

pyplot.axes([x, y, w, h])是用来在画图板上确认图形区的位置和大小的函数,x,y表示图形区左下角相对于画图板的坐标,w,h表示图形区的宽高。(缺省时该操作在figure(1)上操作)

pyplot.subplot(abc)本质也是用来确认图形区在画图板上位置大小的函数,区别是该函数将画图板按a行b列等分,然后逐行编号,并选择编号为c的区域作为图形区用来绘图。这是一个axes()操作的高级封装,方便用户使用。subplot(233)表示2行3列的第3个位置(即,第1行第三个区域)

注:subplot重复操作时如果前后两次的划分方式不一致时,会做必要的历史图形清理。

同时,pyplot.show()实际展示的区域是画图板上所有图形区的最小包围区,不是整个画图板,即如果仅仅调用了subplot(224)结果只展示右下角的4号区域,而不是1、2、3、4都展示,因此会存在一定的错觉。
【matplotlib】 图解pyplot figure、subplot、axes、axis的区别

axes() VS axis()

axes([x, y, w, h])用来设定图形区

axis([x_left, x_right, y_bottom, y_top])是用来设置所绘制图形的视窗大小的,表示直接展示的图形是需要满足参数中范围的值,直观表现是绘图区实际展示的坐标范围。

注:axis作用的图形区依旧遵守就近原则。
subplot() VS plot()

subplot用来生成图形区

plot是实际使用的绘图函数,类似的函数还有hist等,plot操作遵守就近原则,即作用在最近一次使用的图形区上。

缺省资源

缺省是指无主动指明的情况下,系统自动提供的资源。

画图板的缺省是:figure(1)

图形区的缺省是:subplot(111)

就近原则

就近原则:在每个函数操作时对上一层资源的依赖遵守最近原则,举例如下:

subplot()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。

axes()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。

axis()作用在最近使用的图形区上,可能来自subplot、axes等

plot()作用在最近使用的图形区上,可能来自subplot、axes等