Складання графіку з новонародженим за допомогою об'єктно-орієнтованого інтерфейсу matplotlib


103

Я дуже вважаю за краще використовувати matplotlibв стилі OOP:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

Це полегшує відстеження декількох фігур і підгруп.

Питання: Як таким чином користуватися новонародженим? Або як змінити цей приклад на стиль OOP? Як сказати seabornфункції побудови графіку, на кшталт lmplotяких Figureабо Axesвона побудована ?


1
Пов'язане: Це питання та ця відповідь для можливого вирішення, яке дозволило б створити фігуру морського вродженого та перемістити всі осі пізніше на сітку субплоти.
ВажливістьBeingErnest

Відповіді:


229

Це трохи залежить від того, яку функцію уроджених ви використовуєте.

Структурні функції у новонароджених широко поділяються на два класи

  • Функції «Сокири рівня», в тому числі regplot, boxplot, kdeplotі багато інших
  • Функції «Малюнок на рівні», в тому числі lmplot, factorplot, jointplotі один або два інших

Перша група ідентифікується, беручи явний axаргумент і повертаючи Axesоб’єкт. Як це підказує, ви можете використовувати їх у "об'єктно-орієнтованому" стилі, передаючи свій Axes:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

Функції на рівні осей будуть малюватися лише на Axesфігурі, і в іншому випадку не будуть возитися з фігурою, тому вони можуть спільно існувати в об'єктно-орієнтованому сценарії matplotlib.

Друга група функцій (Рисунок-рівень) відрізняється тим, що отриманий сюжет потенційно може включати кілька Осей, які завжди організовані "змістовно". Це означає, що функції повинні мати повний контроль над фігурою, тому неможливо побудувати, скажімо, такий, lmplotякий вже існує. Виклик функції завжди ініціалізує фігуру і встановлює її для конкретного сюжету, який вона малює.

Однак, як тільки ви зателефонували lmplot, він поверне об’єкт типу FacetGrid. Цей об'єкт має деякі методи роботи над отриманим сюжетом, які трохи знають про структуру ділянки. Він також розкриває основну фігуру та масив осей на аргументах FacetGrid.figта FacetGrid.axes. jointplotФункція дуже схожа, але вона використовує JointGridоб'єкт. Таким чином, ви все ще можете використовувати ці функції в об'єктно-орієнтованому контексті, але все ваше налаштування має відбутися після того, як ви викликали функцію.


Це було дуже корисно. Подивіться на мою відповідь тут: stackoverflow.com/questions/27019079 / ...
Денсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.