Призначення "% matplotlib inline"


482

Невже хтось може мені пояснити, в чому саме полягає користь %matplotlib inline?


22
Це магічна функція, яка перетворює фігуру в зошит (замість того, щоб відображати дамп об’єкта фігури). Простий Matplotlib підручник знаходиться тут data-blogger.com/2017/11/15 / ... .
www.data-blogger.com

6
Ви можете перевірити наявні движки (як inline) на вході: %matplotlib --list.
Луїс

Відповіді:


285

%matplotlibє магічною функцією в IPython. Я процитую тут відповідну документацію, яку ви прочитаєте для зручності:

IPython має набір попередньо визначених "магічних функцій", які можна викликати за допомогою синтаксису стилю командного рядка. Існує два види магії, орієнтовані на лінії та клітини. Лінія магії має префікс символу% і працює так само, як виклики командного рядка ОС: вони отримують як аргумент решту рядка, де аргументи передаються без дужок чи лапок. Лінії магії можуть повернути результати і їх можна використовувати в правій частині завдання. Магія комірок має префікс з подвійним %%, і вони є функціями, які отримують в якості аргументу не тільки решту рядка, але і рядки під ним в окремий аргумент.

%matplotlib inline встановлює вихідний модуль matplotlib на "вбудований" бекенд :

У цьому бекенді вихід команд для побудови графіків відображається в рядку в межах фронту, як ноутбук Юпітера, безпосередньо під кодом коду, який його створив. Отримані сюжети потім також будуть зберігатися в документі зошита.

Під час використання "вбудованого" бекенда ваші графіки matplotlib будуть включені у ваш ноутбук поруч із кодом. Можливо, варто також прочитати, як зробити сюжет matplotlib для ноутбука IPython для вказівки про те, як його використовувати у своєму коді.

Якщо ви також хочете інтерактивність, ви можете використовувати бекенд nbagg з %matplotlib notebook(у IPython 3.x), як описано тут .


4
% matplotlib inline ^ SyntaxError: недійсний синтаксис

4
@Jadda Ви використовуєте IPython? Якщо ні, ви отримаєте синтаксичну помилку, оскільки це недійсний CPython ("стандартний" інтерпретатор для Python). Мало сенсу використовувати його так чи інакше, якщо ви не використовуєте ноутбук IPython, оскільки вся справа в тому, щоб зробити сюжети в рядку з ноутбуком.
Aurora0001

Так. Я використовую це в ID Spyder (частина Anaconda) для реалізації API виявлення об’єктів

3
У такому випадку, @Jadda, схоже, що у вас є нове запитання . Ви повинні включити туди всі відповідні деталі, щоб ви могли отримати більше уваги щодо свого питання, ніж у коментарях до цієї відповіді. Удачі.
Aurora0001

2
Гаразд, але яка альтернатива: як я бачу сюжети, якщо немає такої магії?
JaakL

77

За умови, що ви працюєте з IPython, %matplotlib inlineваші виведення сюжету відображатимуться та зберігатимуться у зошиті.

Відповідно до документації

Щоб налаштувати це, перед тим, як matplotlibвиконати будь-який графік чи імпорт, потрібно виконати %matplotlib magic command. Це виконує необхідні за кадром настройки для IPython, щоб правильно працювати рука об руку matplotlib; однак, він фактично не виконує жодних команд імпорту Python, тобто ніякі імена не додаються до простору імен.

Особливо цікавим бекендом, який надає IPython, є inlineбекенд. Це доступно лише для ноутбука Юпітер та QtConsole Jupyter. На нього можна звернутися так:

%matplotlib inline

У цьому бекенді вихід команд для побудови графіків відображається в рядку в межах фронту, як ноутбук Юпітера, безпосередньо під кодом коду, який його створив. Отримані сюжети потім також будуть зберігатися в документі зошита.


32

Якщо ви хочете додати сюжети до свого ноутбука Юпітера, то %matplotlib inlineце стандартне рішення. А ще інші магічні команди будуть matplotlibінтерактивно використовувати в межах Юпітера.

%matplotlib: будь-яка pltкоманда сюжету тепер призведе до відкриття вікна фігури, і для оновлення діаграми можна запустити подальші команди. Деякі зміни не відбуватимуться автоматично, щоб змусити оновити, використовуватиplt.draw()

%matplotlib notebook: призведе до інтерактивних сюжетів, вбудованих у зошит, ви можете збільшити масштаб і змінити розмір фігури

%matplotlib inline: малюйте лише статичні зображення в зошиті


7

Починаючи з IPython 5.0 та matplotlib 2.0, ви можете уникнути використання специфічної магії IPython та використання, matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()що має і переваги роботи поза межами IPython.

ipython docs


Я думаю, це відрізняється від зміни бекенда. За винятком випадків inline, коли ділянки генеруються у зовнішніх вікнах, і вам потрібно використовувати display (), щоб показати їх у зошиті.
Vincenzooo

4

Якщо ви не знаєте, що таке бекенд, ви можете прочитати це: https://matplotlib.org/tutorials/introductory/usage.html#backends

Деякі люди використовують matplotlib інтерактивно з оболонки python і мають графіки вікон, що спливають під час введення команд. Деякі люди запускають ноутбуки Юпітера та малюють вбудовані графіки для швидкого аналізу даних. Інші вбудовують matplotlib в графічні інтерфейси користувача, такі як wxpython або pygtk для створення багатих додатків. Деякі люди використовують matplotlib у пакетних скриптах для генерування зображень постскрипту за допомогою чисельних симуляцій, а інші запускають сервери веб-додатків для динамічного обслуговування графіків. Для підтримки всіх цих випадків використання matplotlib може орієнтуватися на різні результати, і кожна з цих можливостей називається бекендом; "frontend" - це код, що стоїть перед користувачем, тобто графічний код, тоді як "backkend" виконує всю важку роботу за кадром, щоб зробити фігуру.

Отже, коли ви набираєте% matplotlib inline, він активує вбудований сервер. Як обговорювалося в попередніх публікаціях:

У цьому бекенді вихід команд для побудови графіків відображається в рядку в межах фронту, як ноутбук Юпітера, безпосередньо під кодом коду, який його створив. Отримані сюжети потім також будуть зберігатися в документі зошита.


4

Це просто означає, що будь-який графік, який ми створюємо як частину нашого коду, буде відображатися в тому ж зошиті, а не в окремому вікні, що сталося б, якби ми не використали цей магічний вислів.


3

Щоб пояснити це зрозуміло:

Якщо вам це не подобається так:

введіть тут опис зображення

додати %matplotlib inline

введіть тут опис зображення

і там у вас це є у вашому зошиті з юпітером.


2

TL; DR

%matplotlib inline - Відображає вихідний рядок


Ядро IPython має можливість відображення ділянок шляхом виконання коду. Ядро IPython призначене для безперебійної роботи з бібліотекою побудови графіків matplotlib, щоб забезпечити цю функціональність.

%matplotlib- це магічна команда, яка виконує необхідні за кадром настройки для IPython для правильної роботи рука об руку matplotlib; він не виконує жодних команд імпорту Python, тобто жодні імена не додаються до простору імен.

Відображення виводу в окремому вікні

%matplotlib

Відобразити вихідний рядок

(доступно лише для ноутбука Юпітер та QtConsole Jupyter)

%matplotlib inline

Відображення за допомогою інтерактивних програм

(дійсні значення 'GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template')

%matplotlib gtk

Приклад - GTK3Agg - візуалізація Agg на полотно GTK 3.x (потрібні PyGObject та pycairo або cairocffi).

Більш детально про інтерактивні програмні засоби Matplotlib: тут


Починаючи з, IPython 5.0і matplotlib 2.0ви можете уникнути використання специфічної магії та використання IPython matplotlib.pyplot.ion()/, matplotlib.pyplot.ioff() які мають і переваги роботи поза межами IPython.

Довідка: Різний результат IPython - інтерактивне графікування


Справжнє питання Noob тут, вибачте .... що таке "ядро IPython" і що таке "магічна команда". Чи несподівано Python розколовся на мене і пішов непітонічно? Я ніколи не чув про ці поняття.
lb_so

Для ноутбука python (ipynb) - ядро ​​ipython або ядро ​​jupyter - це версія python (та залежності), яка повинна використовуватися проектом. Ви можете запустити ноутбук з юпітером, а потім змінити ядра для запуску комірок з іншою конфігурацією python та налаштування змінних середовища та багато іншого.
Ані Менон

Команда @Ib_so Magic - це функція ipython / jupyter. Детальніше читайте тут.
Ані Менон

0

Якщо ви працюєте з Блокнотом Юпітера, команда% matplotlib inline зробить, що ваші виведення сюжету відображатимуться в блокноті, а також можуть бути збережені.


-8

Це не обов'язково писати. Для мене це добре працювало без ( %matplotlib) магічної функції. Я використовую компілятор Sypder, який постачається в Anaconda.


13
Spyder - це IDE, а не компілятор.
Матьє Брючер

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