Matplotlib Contour Clabel - Расположение - PullRequest
15 голосов
/ 08 мая 2010

Я хотел бы контролировать расположение элементов matplotlib на контурном графике, но без использования флага manual = True в разделе clabel. Например, я хотел бы указать x-координату и создать метки в точках, проходящих через эту линию. Я вижу, что вы можете получить местоположение отдельных меток, используя get_position (), но я застрял в этом. Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

13 голосов
/ 22 октября 2012

Да, теперь есть способ контролировать местоположение этикеток! https://github.com/matplotlib/matplotlib/pull/642

plt.figure()
CS = plt.contour(X, Y, Z)
manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]
plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)
5 голосов
/ 10 мая 2010

Нет, в matplotlib нет способа сделать это.Предполагается, что вы либо будете жить с местами по умолчанию, либо будете полностью интерактивными с руководством и с помощью мыши.

Возможно, вы захотите подать это как отчет об ошибке в апстриме, чтобы они могли улучшить свои алгоритмы.* Есть несколько вариантов, чтобы обойти это.Первый заключается в программном размещении текста на контурной фигуре.Вы не сможете надежно удалить строки под текстом таким образом.Предполагая, что у вас есть контур c, вы можете найти контурные линии в c.collections.Для каждой линии контура вызовите get_paths и поместите текст в этот путь.

Другой вариант - заменить код для ручного размещения (в matplotlib.contour.BlockingContourLabeler) или настроить код, который находит позиции меток (в matplotlib.contour.locate_label), но обе функции довольно плотные.Если вы можете придумать рабочую замену для locate_label, просто перезапишите старый метод в вашем макросе построения

def your_locate_label(self, linecontour, labelwidth):
    # some magic
    pass

ar = np.array([[1,0], [0,1]]
c = matplotlib.contour(ar)
c.locate_label = your_locate_label

c.clabel()

Кстати, если вы используете ipython, вы можете легко просмотреть источник функции из интерактивного сеансас помощью

%psource c.clabel

или напрямую вызвать ваш $EDITOR для файла, если он определен с помощью

%edit c.clabel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...