Я использую legend(loc='best')
много. Я заметил, что, по-видимому, по умолчанию в верхнем правом углу, если доступно много места. Тем не менее, я хотел бы loc='best'
по умолчанию в верхнем левом углу. (Как) можно ли изменить это поведение?matplotlib легенда местоположение по умолчанию
ответ
Вы могли бы переопределить метод в Matplotlib, который находит лучшее место,
Это в here.
В @BrenBarn комментариях ниже, и упоминает в своем ответе, волшебство происходит в _get_anchored_bbox
, на линии 875.
Добавить это:
from matplotlib.legend import Legend
def _get_anchored_bbox(self, loc, bbox, parentbbox, renderer):
assert loc in range(1, 11) # called only internally
BEST, UL, UR, 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"}
c = anchor_coefs[loc]
fontsize = renderer.points_to_pixels(self._fontsize)
container = parentbbox.padded(-(self.borderaxespad) * fontsize)
anchored_box = bbox.anchored(c, container=container)
return anchored_box.x0, anchored_box.y0
Legend._get_anchored_bbox = _get_anchored_bbox
В верхней части кода, и он изменяет поведение. Я удалил комментарии и немного изменил интервал, чтобы уменьшить занятость. В качестве альтернативы вы можете просто выгрузить его в другой файл, назовите его legendLocationHack.py
и вызовите его, когда захотите.
Вы можете отправить обезьяну 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
.
Любой такой раствор обезьяны должен рассматриваться как хрупкий. Это может сломаться, если что-то изменится в более поздней версии matplotlib, так как оно включает в себя переопределение внутренних функций, с которыми вам не нужно общаться. Возможно, лучше спросить в списке рассылки matplotlib или поднять проблему в трекере ошибок, запросив настраиваемый параметр, чтобы установить порядок установления связи.
Было бы довольно легко подтолкнуть изменения, которые позволят вам поместить * по умолчанию * упорядочение местоположений ради одинаково взвешенных мест ... – will
- 1. Matplotlib: Интеллектуальный показатель шкалы/легенда местоположение
- 2. Matplotlib Легенда в петле?
- 3. Matplotlib целая легенда leftaligned
- 4. Табличная легенда для matplotlib
- 5. Легенда легенды Matplotlib
- 6. FileSystemObject - местоположение по умолчанию
- 7. Matplotlib Легенда руководства Основные примеры
- 8. Matplotlib spectrogram интенсивность легенда (colorbar)
- 9. Matplotlib разброс точек легенда точек
- 10. matplotlib - Легенда в отдельном подблоке
- 11. легенда Matplotlib на первом подзаголовке
- 12. Отображение Легенда в Matplotlib BaseMap
- 13. Легенда, использующая PathCollections в matplotlib
- 14. легенда matplotlib с двойной ошибкой
- 15. Общая легенда для subplot matplotlib
- 16. matplotlib. Легенда для одной кривой
- 17. Matplotlib легенда NumPoints не работают
- 18. Легенда отрезают на спасение - Matplotlib
- 19. Легенда о круговой диаграмме matplotlib
- 20. Matplotlib легенда собирание с якорем
- 21. Python Matplotlib Многоцветная Легенда Вступление
- 22. JSP Местоположение курсора по умолчанию
- 23. По умолчанию местоположение координат GPS
- 24. установка matplotlib в другом месте по умолчанию
- 25. Конфигурация шлюпки по умолчанию matplotlib
- 26. изменить шрифт по умолчанию matplotlib
- 27. Передача переменных по умолчанию matplotlib
- 28. легенда Matplotlib, добавьте элементы по столбцам, а не вниз
- 29. неуместная легенда на участке разброса в matplotlib
- 30. Как изменить местоположение по умолчанию stack.yaml по умолчанию в Windows?
Ах, если это работает, это гениальное исправление/взлом: D – Ffisegydd
Я не думаю, что это гарантированно сработает, поскольку «коды» - это dict, а dicts не имеют надежного порядка. Фактическое упорядочение происходит в '_get_anchored_bbox' (см. Мой ответ). Конечно, любой вид подобной подобной игры может сломаться с более поздними версиями, поэтому, если это работает, это проще, чем мое решение. – BrenBarn