我想用一个新的matplotlib图例替换一个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条答案
按热度按时间pgccezyw1#
若要回答问题中的程式码为何无法运作的问题:
图例的位置仅在绘制图形时在运行时确定。此外,未设置bbox_to_锚,因此它将是完整的轴(
(0,0,1,1)
)。您可以先绘制画布,然后获取窗口范围
然而,这不会给予你正确的位置(只是接近它)。
现在,一个可能的解决方案是不替换图例,而仅更新其内容:
否则,如果无法进行更新,则需要使用旧图例中的bbox_to_锚和loc参数:
在模式被设置为“扩展”的情况下,这仍然可能失败。它也只有在使用相同的fancybox参数创建新图例时才是准确的。
mpgws1up2#
除非我误会了,否则就这么做吧: