嵌套图表域布局(Nested Axes layouts)
有时,需要两个或多个可能不需要相互关联的图表域(Axes)网格。实现这一点最简单的方法是使用子图表(Figure.subfigures)。请注意,子图表布局(subfigure layouts)是独立的,因此每个子图(subfigure)中的图表域框架(Axes spines)不一定对齐。有关实现相同效果的其它方法,详情请参见GridSpecFromSubplotSpec。
完整代码与运行结果:
·
·
·
·
·
·
·
·
·
·
·
·
·
·
ipython%matplotlib tkimport matplotlib.pyplot as plt
fig = plt.figure(layout="constrained")subfigs = fig.subfigures(1, 2, wspace=0.07, width_ratios=[1.5, 1.])axs0 = subfigs[0].subplots(2, 2)subfigs[0].set_facecolor('0.9')subfigs[0].suptitle('subfigs[0]\nLeft side')subfigs[0].supxlabel('xlabel for subfigs[0]')
axs1 = subfigs[1].subplots(3, 1)subfigs[1].suptitle('subfigs[1]')subfigs[1].supylabel('ylabel for subfigs[1]')
也可以通过嵌套列表(nested lists)来使用subplot_mosaic实现嵌套图表域(nest Axes)。这种方法不像上面那样使用子图表(subfigures),因此缺乏添加每个子图的suptitle和supxlabel等的能力。实际上,如下面的代码,它只是subgridspec方法的一个方便包装器。
完整代码与运行结果:
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
ipython%matplotlib tkimport matplotlib.pyplot as plt
def annotate_axes(ax, text, fontsize=18): ax.text(0.5, 0.5, text, transform=ax.transAxes, ha="center", va="center", fontsize=fontsize, color="darkgrey") inner = [['innerA'], ['innerB']]outer = [['upper left', inner], ['lower left', 'lower right']]
fig, axd = plt.subplot_mosaic(outer, layout="constrained")for k in axd: annotate_axes(axd[k], f'axd["{k}"]')
Figure.subfigures:
https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.subfigures
GridSpecFromSubplotSpec:https://matplotlib.org/stable/api/_as_gen/matplotlib.gridspec.GridSpecFromSubplotSpec.html#matplotlib.gridspec.GridSpecFromSubplotSpec
subplot_mosaic:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot_mosaic.html#matplotlib.pyplot.subplot_mosaic
subgridspec:https://matplotlib.org/stable/api/_as_gen/matplotlib.gridspec.SubplotSpec.html#matplotlib.gridspec.SubplotSpec.subgridspec