一旦移除了一个数字并再次添加到画布,我正在尝试恢复图例位置。使用
生成图例leg=ax.legend(bbox_to_anchor=(0.99,0.99) , loc='upper right')
leg.draggable(True,use_blit=True,update='bbox')
我正在使用update='bbox'
,一旦拖动了图例,就会更新bbox位置。
恢复时,我正在使用get_bbox_to_anchor
给我一个TransformedBbox
如果我不拖动图例
TransformedBbox(Bbox([[0.99, 0.99], [0.99, 0.99]]), BboxTransformTo(TransformedBbox(Bbox([[0.125, 0.1], [0.9, 0.9]]), BboxTransformTo(TransformedBbox(Bbox([[0.0, 0.0], [12.975, 8.1375]]), Affine2D(array([[ 80., 0., 0.],
[ 0., 80., 0.],
[ 0., 0., 1.]])))))))
如果我拖动图例
TransformedBbox(Bbox([[485382.883642, 190633.226933], [485382.883642, 190633.226933]]), BboxTransformTo(TransformedBbox(Bbox([[0.125, 0.1], [0.9, 0.9]]), BboxTransformTo(TransformedBbox(Bbox([[0.0, 0.0], [12.975, 8.1375]]), Affine2D(array([[ 80., 0., 0.],
[ 0., 80., 0.],
[ 0., 0., 1.]])))))))
现在我使用
bbox
和transform
了
transformedbbox=leg.get_bbox_to_anchor()
bbox= transformedbbox.inverse_transformed(ax.transAxes)
# print bbox
# Bbox(x0=485382.883642, y0=190633.226933, x1=485382.883642, y1=190633.226933)
transform= transformedbbox._transform
# print transform
# BboxTransformTo(TransformedBbox(Bbox([[0.125, 0.1], [0.9, 0.9]]), BboxTransformTo(TransformedBbox(Bbox([[0.0, 0.0], [12.975, 8.1375]]), Affine2D(array([[ 80., 0., 0.],
[ 0., 80., 0.],
[ 0., 0., 1.]]))))))
我使用它们来使用接受bbox和转换的set_bbox_to_anchor
来恢复图例。
leg.set_bbox_to_anchor(bbox,transform)
但是我的传说远离这个人物(数英里远)。
我很可能在提取变换方面犯了一些错误。提取bbox和转换信息以便与set_bbox_to_anchor
一起使用的正确方法是什么。
更新
(如果get_bbox_to_anchor
应该在轴坐标系中给出输出)
def _update_bbox_to_anchor(self, loc_in_canvas)
文件的方法Lib\site-packages\matplotlib\legend.py
如果我换行
tr = self.legend.axes.transAxes
与
tr = self.legend.axes.transAxes.inverted()
拖动图例get_bbox_to_anchor
输出后:
TransformedBbox(Bbox([[0.341489285295, 0.433591056494], [0.341489285295, 0.433591056494]]), BboxTransformTo(TransformedBbox(Bbox([[0.125, 0.1], [0.9, 0.9]]), BboxTransformTo(TransformedBbox(Bbox([[0.0, 0.0], [12.975, 8.1375]]), Affine2D(array([[ 80., 0., 0.],
[ 0., 80., 0.],
[ 0., 0., 1.]])))))))
显然看起来像轴坐标系中的点。
但是在使用这些点时,传奇的位置有一个小的偏移量。
更改图例loc
会更改班次的方向和幅度。
(lower left
最低,upper right
最高
更新2
最小工作示例
import matplotlib.pyplot as plt
fig_dict=[]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10), label='Test')
legend = ax.legend(loc='upper right',bbox_to_anchor=(0.99,0.99))
legend.draggable(True,use_blit=True,update='bbox')
fig.canvas.draw()
def on_scroll(event):
print legend.get_bbox_to_anchor()
fig.canvas.mpl_connect('scroll_event', on_scroll)
fig.show()
此示例在滚动
上打印get_bbox_to_anchor
的输出
在def _update_bbox_to_anchor(self, loc_in_canvas)
文件的方法Lib\site-packages\matplotlib\legend.py
进行更改之前和之后拖动图例后比较滚动的输出
替换行
tr = self.legend.axes.transAxes
与
tr = self.legend.axes.transAxes.inverted()