Предпочтительный способ установки свойств 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 устойчивым?
Ответы
Ответ 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()]
который решает мои проблемы. Надеюсь, это поможет.