matplotlib中的bbox_to_anchor和loc
我看到了一段关于 matplotlib
的代码,它通过关键词 loc
和 bbox_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_anchor
和 loc
的目的。不过,使用这两个一起在同一个图例设置中有什么好处吗?根据我的理解和使用,如果指定了 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_anchor
和 loc
时,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) 的位置。第二个命令则会把图例的左边中心放在同样的坐标(也就是把图例向右移动)。最后,第三个选项会把图例的右边中心放在这个坐标(也就是把图例向左移动)。