Python 如何在matplotlib中绘制矩形,宽度始终为X轴的10%,高度始终为1(Y轴的单位),即使在缩放/移动时也会粘在角上?

Python 如何在matplotlib中绘制矩形,宽度始终为X轴的10%,高度始终为1(Y轴的单位),即使在缩放/移动时也会粘在角上?,python,matplotlib,transform,Python,Matplotlib,Transform,我研究了matplotlib.transforms模块,但还没有找到如何同时实现以下所有目标 使用列表x和y中的x和y坐标绘制曲线 绘制一个固定在左下角的矩形(matplotlib.patches.rectangle) 矩形的宽度为水平轴的10%(xmax xmin) 高度为1,表示单位高度矩形 移动/缩放绘图时,矩形将固定在左下角 缩放时,矩形的宽度保持为水平轴0.1*(xmax xmin)的10% 缩放时,矩形的高度与y轴的变化一致 似乎在水平方向上,刻度和位置都在轴上。变速,这很容易做到。

我研究了matplotlib.transforms模块,但还没有找到如何同时实现以下所有目标

  • 使用列表x和y中的x和y坐标绘制曲线
  • 绘制一个固定在左下角的矩形(matplotlib.patches.rectangle)
  • 矩形的宽度为水平轴的10%(xmax xmin)
  • 高度为1,表示单位高度矩形
  • 移动/缩放绘图时,矩形将固定在左下角
  • 缩放时,矩形的宽度保持为水平轴0.1*(xmax xmin)的10%
  • 缩放时,矩形的高度与y轴的变化一致
  • 似乎在水平方向上,刻度和位置都在轴上。变速,这很容易做到。但是,沿垂直方向,我需要在axis.transData中显示比例,但在axis.transAxes中显示位置。如果我放弃第5项,我可以使用transforms.blended_transform_factory(),使Axis.transAxes位于水平方向,Axis.transData位于垂直方向,在这种情况下,如果我缩放,矩形的高度将正确更改,但它可能在垂直方向部分或完全看不见


    有人知道这在不太深入matplotlib的情况下是否可行吗?

    您可以将
    AnchoredOffsetbox
    子类化,让艺术家“锚定”在轴的特定位置。看

    演示代码:

    导入matplotlib.pyplot作为plt
    从matplotlib.patches导入矩形
    从matplotlib.offsetbox导入offsetbox、AnchoredOffsetbox、AuxTransformBox
    锚定角类(锚定角盒):
    定义初始值(自、变换、宽度、高度、位置,**矩形kwds):
    self._box=AuxTransformBox(转换)
    self.rectangle=矩形((0,0),宽度,高度,**rect_-kwds)
    self.\u box.add\u艺术家(self.rectangle)
    super().uuuu init_uuuuuuuuu(loc,pad=0,borderpad=0,
    child=self.\u框,frameon=False)
    图,ax=plt.子批次()
    r=锚定角(ax.get_yaxis_transform(),宽度=0.1,高度=1,
    loc='左下角',颜色='绿色',alpha=0.5)
    ax.添加艺术家(r)
    ax.set_xlim(0,1)
    ax.set_ylim(0,2)
    plt.show()