matplotlib中的bbox_to_anchor和loc

52 投票
2 回答
149262 浏览
提问于 2025-04-18 15:33

我看到了一段关于 matplotlib 的代码,它通过关键词 locbbox_to_anchor 来定制图例的位置。比如:

fig.legend([line1, line2], ['series1', 'series2'], bbox_to_anchor=[0.5, 0.5], 
           loc='center', ncol=2)

我还见过一种变体,其中 bbox_to_anchor 是在 loc 之后使用的。

我明白单独使用 bbox_to_anchorloc 的目的。不过,使用这两个一起在同一个图例设置中有什么好处吗?根据我的理解和使用,如果指定了 bbox_to_anchor,那么 loc 参数似乎就没什么太大关系了。

有没有人能确认一下这个?我没有看到相关的文档。

2 个回答

37

@Gabriel 的解释有点误导。bbox_to_anchor=[x0, y0] 这个设置会在位置 [x0, y0] 创建一个边界框,它的 左下角 就在这个位置。这个边界框的大小是零,也就是说它等同于 bbox_to_anchor=[x0, y0, 0, 0]。这样的话,图例就会被放在这个框“里面”,并根据指定的 loc 参数来重叠在这个框上。所以 loc 就是用来指定图例在这个框里的位置。

另外,可以看看这个问题 在 matplotlib 中,'bbox_to_anchor' 的四个元素元组参数是什么意思?

70

当同时使用 bbox_to_anchorloc 时,loc 参数会告诉 matplotlib 你希望图例的哪个部分放在 bbox_to_anchor 指定的位置。举个简单的例子(我稍微简化了一下命令),下面这三个选项会让你的图例出现在不同的位置。

 fig.legend([line1], ['series1'], bbox_to_anchor=[0.5, 0.5], loc='center')
 fig.legend([line1], ['series1'], bbox_to_anchor=[0.5, 0.5], loc='center left')
 fig.legend([line1], ['series1'], bbox_to_anchor=[0.5, 0.5], loc='center right')

第一个命令会把图例的边框中心放在坐标 (0.5, 0.5) 的位置。第二个命令则会把图例的左边中心放在同样的坐标(也就是把图例向右移动)。最后,第三个选项会把图例的右边中心放在这个坐标(也就是把图例向左移动)。

撰写回答