Python 如何使用mpl_Toolkit.axes_grid1.inset_locator.mark_inset控制zorder和剪裁?

Python 如何使用mpl_Toolkit.axes_grid1.inset_locator.mark_inset控制zorder和剪裁?,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,在带有插入轴的绘图中,我想使用mpl_toolkits.axes_grid1.inset_locator.mark_inset标记插入。但是,我在控制zorder和剪切标记插图的结果线时遇到了麻烦。插入轴设置为zorder=4,我正在使用: fig=plt.figure() 图设置紧密布局(假) ax=图gca() x=np.arange(4500.0,10000.0) 轴测图(x,700-x/20.0+20*np.sin(x/8.0),标签=“天际线”) 从mpl_toolkits.axes_

在带有插入轴的绘图中,我想使用mpl_toolkits.axes_grid1.inset_locator.mark_inset标记插入。但是,我在控制zorder和剪切标记插图的结果线时遇到了麻烦。插入轴设置为
zorder=4
,我正在使用:

fig=plt.figure()
图设置紧密布局(假)
ax=图gca()
x=np.arange(4500.0,10000.0)
轴测图(x,700-x/20.0+20*np.sin(x/8.0),标签=“天际线”)
从mpl_toolkits.axes_grid1.inset_定位器导入插入位置、标记_inset、插入轴
插入轴=图添加轴([0,0,1,1],zorder=4,frameon=True)
插入轴设置轴定位器(插入位置(ax[0.1,0.1,0.4,0.5]))
插图(x,700-x/20.0+20*np.sin(x/8.0))
插页(88008850)
插页(230285)
#插入轴组件(100600)
标记插图(ax,插图ax,loc1=2,loc2=3,线宽=0.7,fc=“无”,ec=“k”,alpha=0.4,clip\u-on=True,zorder=3)
ax.axhline(y=300,c='r',label=“Test”)
leg=ax.图例(ncol=1,loc='上止点',frameon=True,framealpha=1.0)
腿。设置顺序(5)
plt.show()
对于y极限中的两种不同情况,会导致


此处不需要的行为是,插入线分别出现在插入轴(而标有测试标记的线正好位于插入轴的后面)和主轴的外部(以及通过图例)。我本以为
zorder
clip_-on
参数可以解决这个问题,但它们似乎没有效果。

案例1

zorder
以每轴为基础进行评估。由于连接线已添加到插入轴,因此它们将始终位于轴背景的顶部。一个选项是将它们从插入轴中删除并添加到原始轴

案例2

matplotlib源代码中没有明确剪裁连接器,因为作为插入轴的一部分,您永远不希望它们被插入轴剪裁

但是,如果它们是原始轴的一部分,则可以再次将“剪裁”设置为启用

总计

ret = mark_inset(ax, inset_ax, loc1=2, loc2=3, linewidth=0.7, fc="None", ec='k', alpha=0.4)

for bc in ret[1:]:
    bc.remove()
    ax.add_patch(bc)
    bc.set_zorder(4)
    bc.set_clip_on(True)

zorder
不是全局的。这是每轴。如果您想提供一个测试用例(请参阅),我很乐意对此进行深入研究。这很有意义,我用我正在使用的代码更新了我的问题。我想我的问题是如何控制
zorder
和不同轴之间的剪切行为。为什么不在
mark\u inset
中使用
loc1=1,loc2=4,
?当然我可以在这里这样做,但在一般情况下,我可能不知道插入轴的精确位置/大小,选择“正确的”
loc1
loc2
,可能会变得很棘手。