我有一些代码可以生成带有单个Axes对象的图形。
import matplotlib.pyplot as plt
def myfunc():
fig, ax = plt.subplots()
ax.plot(range(5))
return fig, ax
fig, ax = myfunc()
我想包装那些代码,以便我可以多次调用它,提取ax对象并将其收集到一个新的图中,基本上创建一个合成。我已经有了一些代码将轴从一个图形移动到另一个图形:
def move_axes(ax, original_fig, target_fig, position=None):
"""
Move Axes object from original_fig to target_fig.
Sacrifices original_fig.
# MISSING A CLEVER WAY TO AUTOMATICALLY ESTIMATE THE NEW POSITION.
"""
if position is None:
position = ax.get_position()
ax.remove()
ax.figure = target_fig
target_fig.axes.append(ax)
target_fig.add_axes(ax)
ax.set_position(position)
plt.close(original_fig)
return target_fig
所以我想做的是:
target_fig = plt.figure()
for i in range(3):
fig, ax = myfunc()
move_axes(ax, fig, target_fig)
但这不起作用,因为我需要设置轴的位置,使它们不会相互重叠。有没有一个干净的方法来做到这一点,即抓住轴的大小,展开target_fig
,以便每个新的斧头垂直堆叠在前一个轴的下方?