我经常使用 legend(loc='best')
。我注意到它似乎默认位于右上角,如果有很多空间可用的话。但是,我希望 loc='best'
默认位于左上角。 (如何)有可能改变这种行为?
最佳答案
你可以 monkeypatch matplotlib.legend.Legend._get_anchored_bbox
。此函数包含以下代码:
BEST, UR, UL, LL, LR, R, CL, CR, LC, UC, C = list(xrange(11))
anchor_coefs = {UR: "NE",
UL: "NW",
LL: "SW",
LR: "SE",
R: "E",
CL: "W",
CR: "E",
LC: "S",
UC: "N",
C: "C"}
这会将连续的“位置代码”映射到空间位置。 _find_best_position
中的不良计算代码通过占据序列中最早的位置来打破不良关系,因此右上角将获胜,除非另一个位置实际上更好。我认为您可以安全地交换代码,方法是编写一个新版本的函数,将第一行更改为:
BEST, UL, UR, LL, LR, R, CL, CR, LC, UC, C = list(xrange(11))
请注意,我切换了 UL 和 UR。当我在一个简单的 V 形图上尝试这样做时,它在更改前将图例放在右上角,但在更改后放在左上角。
要在更改中进行 monkeypatch,您应该重新定义您自己的 _get_anchored_bbox
版本,然后执行 matplotlib.legend.Legend._get_anchored_bbox = my_get_anchored_bbox
。
任何此类 monkeypatched 解决方案都应视为脆弱的。如果在以后的 matplotlib 版本中发生某些更改,它可能会中断,因为它涉及覆盖您不应该搞砸的内部功能。在 matplotlib 邮件列表上询问,或在错误跟踪器中提出问题,请求可配置的参数来设置打破平局顺序可能是更好的主意。
关于python - matplotlib 图例位置默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27536076/