将子图附加到 matplotlib 中的现有图形

Mil*_*dek 3 python matplotlib

我找不到关于如何将子图附加到已绘制的图形的明确参考。SO 上的一些答案已经过时,大多数答案都不清楚,并且 mpl 文档本身并没有很好地展示这一点。

问题fig.add_subplot是它只会在任何现有的轴上绘制。

Mil*_*dek 6

在深入研究源代码后,我发现了三种不同的方法来做到这一点。

所有示例均假设现有图形fig和现有轴ax

A)如果您选择简单的子图几何形状

# add new subplot
ax_new = fig.add_subplot(2, 1, 2)
ax_new.plot(x, y)
# update and redraw existing axis
ax.change_geometry(2, 1, 1)
Run Code Online (Sandbox Code Playgroud)

B) 如果你想使用更复杂的布局GridSpec

# create gridspec and add new subplot
gs = fig.add_gridspec(3, 1)
ax_new = fig.add_subplots(gs[2, 0])
ax_new.plot(x, y)
# update and redraw existing axis
ax.set_subplotspec(gs[:2, 0])
ax.update_params()
ax.set_position(ax.figbox)
Run Code Online (Sandbox Code Playgroud)

C) 使用axes_gridmpl 工具包

from mpl_toolkits.axes_grid1 import make_axes_locatable

divider = make_axes_locatable(ax)
# add new subplot of relative size 1 at the bottom of current axis
ax_new = divider.append_axes("bottom", 1)
ax_new.plot(x, y)
Run Code Online (Sandbox Code Playgroud)

希望这可以节省一些人的时间和挖掘!