我正在尝试理解这段代码片段:
def add_inset(ax, rect, *args, **kwargs):
box = ax.get_position()
inax_position = ax.transAxes.transform(rect[0:2])
infig_position = ax.figure.transFigure.inverted().transform(inax_position)
new_rect = list(infig_position) + [box.width * rect[2], box.height * rect[3]]
return fig.add_axes(new_rect, *args, **kwargs)
这段代码为现有图像添加了一个插入框,如下所示: 原始代码来自于这个笔记本文件。
我不明白为什么需要两次坐标变换:
inax_position = ax.transAxes.transform(rect[0:2])
infig_position = ax.figure.transFigure.inverted().transform(inax_position)
transData
、transAxes
和transFigure
转换,可以直接使用。虽然没有提供从轴到图形的转换,但可以很容易地从两个现有的转换中生成它。我已经编辑了答案,并添加了两行代码来说明它的实现方式。 - ImportanceOfBeingErnest