Подтвердить что ты не робот

Предпочтительный способ установки свойств matplotlib figure/axes

Скажем, у меня есть оси matplotlib, называемые ax, и я хочу установить несколько его свойств. В настоящее время я делаю это так:

ax.set_yscale('log')
ax.set_xlim([0,10])
ax.set_xlabel('some label')

Но через некоторое время становится утомительно. Затем я столкнулся с этим методом:

ax.set(yscale='log', xlim=[0,10], xlabel='some label')

Гораздо более кратким, но кажется немного недокументированным. Я имею в виду, что вся документация говорит: "Команда tkstyle set, pass kwargs для установки свойств".

Каков предпочтительный или идиоматический способ? Является ли метод set api устойчивым?

4b9b3361

Ответ 1

Учебник Pyplot рекомендует рекомендовать функции ax.set_xxx(), но также упоминает .setp(xxx=).

С другой стороны, функция .set(xxx=) не используется, а .setp(xxx=), хотя и документирована, не используется в каких-либо примерах (Pyplot API).

Я понимаю, что matplotlib поддерживает как императивный стиль программирования, так и стиль, подобный Matlab. Причина - целевые пользовательские базы - те, которые уже знакомы с Python и теми, кто раньше использовал Matlab.

Я считаю, что matplotlib рекомендуется api .set_xxx().

Быстрая проверка gallery подтверждает это.

Подобная двойственность существует для аргументов ключевого слова для построения функций, за исключением того, что императивный API не так очевиден.

Ответ 2

В качестве супер-позднего ответа на этот вопрос:

ax.set_xlim(4) и ax.set(xlim=4) в конечном итоге одно и то же, поэтому делайте то, что вам нравится. ax.set(kwarg=foo) вызывает ax.set_kwarg(foo) с помощью некоторых манипуляций с строкой, поскольку вы можете видеть, смотрите ли вы на источник. Различные функции setter в основном являются однострочными, но существуют, чтобы позволить работать с интроспективным setp.

Ответ 3

Обычно я использую интерфейс pyplot (интерактивный) для matplotlib, который предоставляет setp функция (которую я использую очень часто).

matplotlib поддерживает использование setp() ( "set property" ) и getp() для установить и получить свойства объекта, а также сделать интроспекцию на объект.

Что позволяет делать то же, что и ваша функция set выше, только вы передаете объект для установки в качестве параметра:

>>> x = arange(0,1.0,0.01)
>>> y1 = sin(2*pi*x)
>>> y2 = sin(4*pi*x)
>>> lines = plot(x, y1, x, y2)
>>> setp(lines, linewidth=2, color='r')

Я предполагаю, что функция setp фактически вызывает функцию переданного объекта set, которая работает, чтобы найти и установить kwargs.

Итак, мои мысли заключаются в том, что, несмотря на отсутствие документации, метод объекта set является идиоматическим подходом для установки нескольких параметров через kwargs вместо строки за строкой.

Мои 2 цента.

Ответ 4

У меня похожие проблемы с бэкэндом matplotlib, и поэтому я просто столкнулся с этим сообщением. Я надеялся, что matplotlib позволит использовать словарь для свойств в сюжете. Используя предложение @Chris Zeh, вы могли:

f = {'xlabel': 'x1', 'ylabel': 'x2'}
[setp(ax, formati, formatj) for formati, formatj in f.items()]

который решает мои проблемы. Надеюсь, это поможет.