如何替换matplotlib图例并保持相同的位置?

时间:2017-04-06 22:16:11

标签: python matplotlib location legend

我想用新的替换matplotlib图例,但保持替换图例的相同(可能是任意)位置。

为什么以下代码不起作用?

import matplotlib.pyplot as plt

plt.plot(range(10))
ax = plt.gca()

leg = plt.legend(['a'], loc='lower left')
bb = leg.get_bbox_to_anchor().inverse_transformed(ax.transAxes)

plt.legend(['b'], bbox_to_anchor=bb)

2 个答案:

答案 0 :(得分:1)

回答问题为什么问题中的代码不起作用的问题:
仅在绘制图形时在运行时确定图例的位置。此外,未设置bbox_to_anchor,因此它将是完整的轴(b)。

您可以做的是首先绘制画布,然后获取窗口范围

$(document).ready(function() {
  var panel1 = new tabpanel("tabpanel1", false);
  $(panel1.$panel).mouseout(function(){
     ## do something
   });
});

然而,这不会给你正确的位置(只接近它)。

现在一个可能的解决方案可能不是替换图例,而只是更新它的内容:

(0,0,1,1)

否则,如果不能选择更新,则需要旧图例中的bbox_to_anchor和loc参数:

ax.figure.canvas.draw()
bb = leg.get_window_extent().inverse_transformed(ax.transAxes)

在模式设置为“展开”的情况下,这可能仍会失败。只有在使用相同的fancybox参数创建新图例时,它才是准确的。

答案 1 :(得分:0)

除非我误解,否则就这样做:

import matplotlib.pyplot as plt

plt.plot(range(10))
ax = plt.gca()

location = 'lower left'

while 1:

    plt.legend(['a'], loc=location)
    plt.pause(1)
    plt.legend(['b'], loc=location)
    plt.pause(1)