Назначение «% matplotlib inline»

483

Может ли кто-нибудь объяснить мне, в чем именно польза %matplotlib inline?

Rishabh
источник
22
Это волшебная функция, которая отображает фигуру в блокноте (вместо отображения объекта рисунка). Простое руководство по Matplotlib находится здесь data-blogger.com/2017/11/15/… .
www.data-blogger.com
7
Вы можете проверить имеющиеся движки (как inline) на входе: %matplotlib --list.
Луис

Ответы:

286

%matplotlibэто магическая функция в IPython. Я приведу здесь соответствующую документацию, которую вы можете прочитать для удобства:

IPython имеет набор предопределенных «магических функций», которые вы можете вызывать с помощью синтаксиса стиля командной строки. Существует два вида магии: линейная и клеточная. Магические строки начинаются с префикса% и работают так же, как вызовы командной строки ОС: они получают в качестве аргумента остальную часть строки, где аргументы передаются без скобок или кавычек. Магические линии могут возвращать результаты и могут использоваться в правой части задания. Магические ячейки имеют префикс с двойным %%, и они являются функциями, которые получают в качестве аргумента не только остальную часть строки, но и строки под ней в качестве отдельного аргумента.

%matplotlib inline устанавливает backend для matplotlib в 'встроенный' backend :

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

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

Если вам нужна интерактивность, вы можете использовать бэкэнд nbagg с %matplotlib notebook(в IPython 3.x), как описано здесь .

Aurora0001
источник
4
% matplotlib inline ^ SyntaxError: неверный синтаксис
4
@Jadda Вы используете IPython? Если нет, вы получите синтаксическую ошибку, так как это недопустимый CPython («стандартный» интерпретатор для Python). В любом случае, нет смысла использовать его, если вы не используете Блокнот IPython, поскольку весь смысл в том, чтобы сделать графики встроенными в блокнот.
Aurora0001
Да. Я использую это в Spyder IDE (часть Anaconda) для реализации API обнаружения объектов
3
В таком случае, @Jadda, похоже, у тебя есть новый вопрос . Вы должны включить все соответствующие детали там, чтобы вы могли получить больше внимания на ваш вопрос, чем в комментариях к этому ответу. Удачи.
Аврора0001
2
хорошо, но какова альтернатива: как я могу увидеть графики, если не активирована такая магия?
JaakL
77

При условии, что вы работаете с IPython, %matplotlib inlineваши выходные данные будут отображаться и сохраняться в блокноте.

Согласно документации

Чтобы установить это, перед выполнением любого построения или импорта matplotlibнеобходимо выполнить %matplotlib magic command. Это обеспечивает необходимую скрытную настройку IPython для правильной работы рука об руку matplotlib; однако он фактически не выполняет никаких команд импорта Python, то есть имена не добавляются в пространство имен.

Особенно интересным бэкэндом, предоставляемым IPython, является inlineбэкэнд. Это доступно только для Jupyter Notebook и Jupyter QtConsole. Это может быть вызвано следующим образом:

%matplotlib inline

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

matusko
источник
32

Если вы хотите добавить графики в свой блокнот Jupyter, то %matplotlib inlineэто стандартное решение. Есть и другие магические команды, которые будут matplotlibинтерактивно использоваться в Jupyter.

%matplotlib: любая pltкоманда заговора теперь вызовет открытие окна рисунка, и можно будет запустить дополнительные команды для обновления заговора. Некоторые изменения не будут отображаться автоматически, для принудительного обновления используйтеplt.draw()

%matplotlib notebook: приведет к интерактивным графикам, встроенным в ноутбук, вы можете увеличивать и изменять размеры фигуры

%matplotlib inline: рисовать только статичные изображения в блокноте

Yossarian42
источник
7

Начиная с IPython 5.0 и matplotlib 2.0, вы можете избежать использования особой магии и использования IPython, matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()которые также имеют преимущества работы вне IPython.

Ipython Docs

Вики Б
источник
Я думаю, что это отличается от смены серверной части. Если не указано иное inline, графики создаются во внешних окнах, и вам нужно использовать display (), чтобы отобразить их в блокноте.
Vincenzooo
5

Это просто означает, что любой график, который мы создаем как часть нашего кода, появится в той же записной книжке, а не в отдельном окне, что произошло бы, если бы мы не использовали это волшебное утверждение.

Аруши Джайн
источник
4

Если вы не знаете, что такое бэкэнд, вы можете прочитать это: https://matplotlib.org/tutorials/introductory/usage.html#backends

Некоторые люди используют matplotlib в интерактивном режиме из оболочки python, и при вводе команд всплывающие окна появляются. Некоторые люди используют записные книжки Jupyter и рисуют линейные графики для быстрого анализа данных. Другие встраивают matplotlib в графические пользовательские интерфейсы, такие как wxpython или pygtk, для создания многофункциональных приложений. Некоторые люди используют matplotlib в пакетных сценариях для генерации изображений PostScript из численного моделирования, а третьи используют серверы веб-приложений для динамического отображения графиков. Для поддержки всех этих вариантов использования matplotlib может предназначаться для различных выходных данных, и каждая из этих возможностей называется бэкэндом; «внешний интерфейс» - это код пользователя, то есть код построения, а «внутренний» выполняет всю тяжелую работу за кулисами, чтобы создать фигуру.

Поэтому, когда вы набираете% matplotlib inline, он активирует встроенный бэкэнд. Как обсуждалось в предыдущих постах:

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

Виханг Каре
источник
3

Чтобы объяснить это ясно:

Если вам не нравится это так:

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

Добавить %matplotlib inline

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

и вот он у тебя в тетради на Юпитере.

прости
источник
2

TL; DR

%matplotlib inline - Отображает вывод в строке


Ядро IPython имеет возможность отображать графики, выполняя код. Ядро IPython разработано для бесперебойной работы с библиотекой графиков matplotlib для обеспечения этой функциональности.

%matplotlibэто волшебная команда, которая выполняет необходимую скрытную настройку для правильной работы IPython matplotlib; он не выполняет никаких команд импорта Python, то есть имена не добавляются в пространство имен.

Показать вывод в отдельном окне

%matplotlib

Вывод на дисплей

(доступно только для Jupyter Notebook и Jupyter QtConsole)

%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 Rich Output - Интерактивная печать

Ани Менон
источник
Настоящий нубский вопрос здесь, извините .... что такое "ядро IPython" и что такое "волшебная команда". Неужели Python внезапно раскололся на меня и перестал быть пифоническим? Я никогда не слышал об этих понятиях.
lb_so
Для записной книжки Python (ipynb) - ipython kernal или jupyter kernal - это версия python (и зависимостей), которая будет использоваться проектом. Вы можете запустить ноутбук Jupyter, а затем изменить ядра, чтобы запустить ячейки с другой конфигурацией Python, настроить переменные среды и многое другое.
Ани Менон
@Ib_so Волшебная команда - это функция ipython / jupyter. Узнайте больше здесь.
Ани Менон
0

При условии, что вы используете Jupyter Notebook, встроенная команда% matplotlib сделает вывод ваших графиков отображаемым в блокноте, а также может быть сохранен.

Ашик Имран
источник
-8

Это не обязательно писать это. Это работало нормально для меня без ( %matplotlib) магической функции. Я использую компилятор Sypder, который поставляется с Anaconda.

user9196865
источник
13
Spyder - это IDE, а не компилятор.
Матье Брухер
3
Хотя ваш ответ не ответил на вопрос ОП, он ответил на мой. Спасибо.
EngrStudent