Как использовать «%matplotlib inline» (с примерами)

Вы можете использовать следующий код для отображения и хранения графиков Matplotlib в блокноте Python Jupyter:
% matplotlib inline
Вот как этот код описан на странице документации :
«Благодаря этому бэкэнду вывод команд построения графика отображается во внешних интерфейсах, таких как блокнот Jupyter , непосредственно под ячейкой кода, которая его создала. Полученные графики также будут сохранены в документе записной книжки».
В следующем примере показано, как использовать этот код на практике.
Пример: как использовать встроенный %matplotlibe
Предположим, мы пытаемся использовать следующий код для создания линейного графика Matplotlib в блокноте Jupyter:
import matplotlib.pyplot as plt #define x and y x = [1, 6, 10] y = [5, 13, 27] #attempt to create line plot of x and y plt.plot (x, y)
Вот как выглядит вывод в блокноте Jupyter:

Код выполняется без ошибок, но линейный график не отображается вместе с кодом.
Чтобы исправить это, мы можем использовать встроенную команду %matplotlib перед созданием линейного графика:
% matplotlib inline import matplotlib.pyplot as plt #define x and y x = [1, 6, 10] y = [5, 13, 27] #create scatter plot of x and y plt.plot (x, y)
Вот как выглядит вывод в блокноте Jupyter:

Обратите внимание, что код снова выполняется без ошибок, а график отображается в записной книжке.
Обратите внимание, что после того, как мы использовали %matplotlib inline , любые графики Matplotlib, которые мы создаем в любых будущих ячейках блокнота, также будут отображаться и храниться в блокноте.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:
Использование %matplotlib inline в Python

В процессе изучения Python и библиотеки Matplotlib, которая используется для визуализации данных, часто встречается команда %matplotlib inline . Она может вызывать недоумение, поскольку выглядит иначе, по сравнению с большинством команд Python. Например, в следующем блоке кода:
import matplotlib.pyplot as plt import numpy as np %matplotlib inline x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) plt.show()
Здесь команда %matplotlib inline может показаться загадочной. Что это и для чего она нужна?
Что такое %matplotlib inline?
%matplotlib inline — это команда, специфичная для IPython (или Jupyter notebook), которая позволяет вам встроить графики прямо внутрь ноутбука, а не в новом окне.
Зачем она нужна?
Когда вы работаете с Matplotlib в интерактивных режимах, таких как Jupyter notebook или IPython, графики, которые вы создаете, отображаются в отдельном окне. Это может быть неудобно, особенно если вы хотите сохранить свою работу в виде ноутбука с результирующими графиками.
Команда %matplotlib inline решает эту проблему, позволяя вам встроить графики прямо в ноутбук. Это удобно, поскольку позволяет сохранить все в одном месте, а также делиться своими ноутбуками с другими.
Как это работает?
%matplotlib inline является примером использования так называемых «магических» функций в IPython. «Магические» функции — это набор команд, предоставляемых IPython, которые имеют синтаксис, отличающийся от обычного синтаксиса Python. Эти функции начинаются с символа % или %% и предназначены для выполнения определенных операций.
В случае с %matplotlib inline , когда математическая библиотека выполняет команду для создания графика, «магическая» функция перехватывает вывод и встраивает его в ноутбук.
Вывод
Команда %matplotlib inline — это удобный инструмент для работы с графиками в интерактивном режиме Python. Она позволяет встроить графики прямо в ноутбук, что упрощает сохранение и обмен результатами работы.
Вывод графиков matplotlib в IPython Notebook

Иногда при работе с библиотекой matplotlib в среде IPython Notebook возникает ситуация, когда графики, построенные с помощью этой библиотеки, не отображаются в блокноте. Вместо этого отображается строка подобного вида:
Это является типичной проблемой, с которой могут столкнуться начинающие пользователи при использовании библиотеки matplotlib в IPython Notebook.
Например, имеется следующий код:
import matplotlib import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 3*np.pi, 500) plt.plot(x, np.sin(x**2)) plt.title('A simple chirp') plt.show()
Ожидается, что после выполнения этого кода на экране появится график функции. Однако, вместо графика появляется строка .
Для решения этой проблемы необходимо использовать магическую команду %matplotlib inline . Эта команда позволяет выводить графики matplotlib прямо в блокноте, а не в отдельном окне.
Таким образом, код будет выглядеть следующим образом:
import matplotlib import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = np.linspace(0, 3*np.pi, 500) plt.plot(x, np.sin(x**2)) plt.title('A simple chirp') plt.show()
Теперь после выполнения этого кода график будет отображаться прямо в блокноте IPython.
Бывают случаи, когда даже после использования команды %matplotlib inline , графики все равно не отображаются. В этом случае стоит проверить, какой backend используется для отрисовки графиков. Это можно сделать с помощью функции matplotlib.get_backend() . Если в качестве backend используется ‘module://IPython.kernel.zmq.pylab.backend_inline’ , то графики должны отображаться нормально. Если же используется другой backend, то его стоит сменить на ‘module://IPython.kernel.zmq.pylab.backend_inline’ с помощью функции matplotlib.use() .
Назначение «%matplotlib inline»
%matplotlib — это волшебная функция в IPython. Я процитирую здесь соответствующую документацию, чтобы вы могли прочитать ее для удобства:
В IPython есть набор предопределенных ‘волшебных функций’, которые вы можете вызвать с помощью синтаксиса стиля командной строки. Существует два вида волшебств, ориентированных на строки и ячейки. Волшебства строк префиксированы символом % и работают так же, как вызовы командной строки ОС: они получают в качестве аргумента остальную часть строки, где аргументы передаются без скобок или кавычек. Волшебства строк могут возвращать результаты и могут использоваться в правой части присваивания. Волшебства ячеек префиксированы двойным %%, и они являются функциями, которые получают в качестве аргумента не только остальную строку, но и строки ниже в отдельном аргументе.
С этим бэкэндом вывод команд графического отображения отображается встроенно внутри фронтенда, например, Jupyter notebook, непосредственно под ячейкой кода, которая его создала. Полученные графики также будут сохранены в документе блокнота.
При использовании ‘inline’ бэкэнда, ваши графики matplotlib будут включены в ваш блокнот, рядом с кодом. Возможно, стоит также прочитать Как сделать график matplotlib IPython notebook встроенным для справки о том, как использовать его в вашем коде.
Если вы также хотите интерактивности, вы можете использовать nbagg backend с %matplotlib notebook (в IPython 3.x), как описано здесь .
Поделиться 26 марта 2017 в 11:19
Чтобы объяснить это ясно:
Если вам не нравится это так:

добавьте %matplotlib inline

и там у вас есть это в вашем блокноте jupyter.
Поделиться 18 апреля 2020 в 12:28
При условии, что вы используете IPython, %matplotlib inline сделает ваши выходы графика отображаться и храниться внутри блокнота.
Чтобы настроить это, перед выполнением любого графического или импортного запроса matplotlib необходимо выполнить магическую команду %matplotlib . Это выполняет необходимую настройку за кулисами для правильной работы IPython рука об руку с matplotlib ; однако, на самом деле не выполняет никаких команд импорта Python, то есть имена не добавляются в пространство имен.
Особенно интересным бэкэндом, предоставленным IPython, является inline . Это доступно только для Jupyter Notebook и Jupyter QtConsole. Его можно вызвать следующим образом:
%matplotlib inline
С этим бэкэндом вывод команд графического запроса отображается встроенно внутри фронтендов, таких как Jupyter notebook, непосредственно под ячейкой кода, которая его создала. Результирующие графики также будут сохранены в документе блокнота.
Поделиться 26 марта 2017 в 11:25
Если вы хотите добавить графики в свой Jupyter notebook, то %matplotlib inline — это стандартное решение. И есть другие магические команды, которые будут использовать matplotlib интерактивно в Jupyter.
%matplotlib : любая команда plt в графике теперь вызовет открытие окна фигуры, и можно запустить дополнительные команды для обновления графика. Некоторые изменения не будут выводиться автоматически, чтобы принудительно обновить, используйте plt.draw()
%matplotlib notebook : приведет к интерактивным графикам, встроенным в блокнот, вы можете увеличить и изменить размер фигуры
%matplotlib inline : только рисовать статические изображения в блокноте
Поделиться 20 марта 2019 в 17:24
Это просто означает, что любой график, который мы создаем в рамках нашего кода, будет отображаться в одной записной книжке, а не в отдельном окне, что произошло бы, если бы мы не использовали этот магический оператор.
Поделиться 06 января 2020 в 12:46
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.
Поделиться 25 марта 2020 в 20:27
Начиная с IPython 5.0 и matplotlib 2.0, вы можете избежать использования специфической магии IPython и использовать matplotlib.pyplot.ion()/matplotlib.pyplot.ioff() , которые также имеют преимущества работы вне IPython.
Поделиться 21 октября 2019 в 06:44
Если вы не знаете, что такое бэкэнд, вы можете прочитать это: https://matplotlib.org/stable/users/explain/backends.html
Некоторые люди используют matplotlib интерактивно из оболочки python и имеют окна графического отображения, которые появляются при вводе команд. Некоторые люди запускают блокноты Jupyter и рисуют встроенные графики для быстрого анализа данных. Другие встраивают matplotlib в графические пользовательские интерфейсы, такие как wxpython или pygtk, чтобы построить богатые приложения. Некоторые люди используют matplotlib в пакетных скриптах для генерации изображений после скрипта из числовых симуляций, а другие запускают серверы веб-приложений для динамического обслуживания графиков. Чтобы поддерживать все эти случаи использования, matplotlib может нацеливаться на различные выходы, и каждая из этих возможностей называется бэкэндом; «фронтенд» — это код, с которым сталкивается пользователь, то есть код графического отображения, в то время как «бэкэнд» выполняет всю тяжелую работу за кулисами, чтобы сделать график.
Таким образом, когда вы вводите %matplotlib inline, он активирует inline backend. Как обсуждалось в предыдущих публикациях:
С этим backend, вывод команд графического отображения отображается inline внутри frontends, например, Jupyter notebook, непосредственно под ячейкой кода, которая его создала. Полученные графики также будут сохранены в документе notebook.
Поделиться 19 сентября 2019 в 14:25
При условии, что вы запускаете Jupyter Notebook, встроенная команда %matplotlib позволит отобразить вывод графика в блокноте, который также может быть сохранен.
Поделиться 14 апреля 2020 в 01:27
Я думаю, что с последними версиями Jupyter/matplotlib фигуры отображаются «встроенно», без необходимости использовать %matplotlib inline .
Таким образом, можно подумать, что эта команда теперь бесполезна. но, на мой взгляд, она создает «менеджер», который настраивает параметры отображения. Matplotlib ищет существующий менеджер при создании фигуры и создает его при необходимости. Внутри matplotlib.pyplot.figure :
manager = _pylab_helpers.Gcf.get_fig_manager(num) if manager is None: # not relevant stuff… manager = new_figure_manager( num, figsize=figsize, dpi=dpi, facecolor=facecolor, edgecolor=edgecolor, frameon=frameon, FigureClass=FigureClass, **kwargs)
Теперь установка параметра отображения ( rcParams ) не создаст «менеджер» самостоятельно. Поэтому при отображении фигуры в первый раз, будет создан новый менеджер и будут перезаписаны ваши параметры.
Закомментируйте/откомментируйте %matplotlib inline и посмотрите, что произойдет. (Не забудьте перезапускать ядро между каждой попыткой!)
import matplotlib.pyplot as plt from matplotlib.image import imread # %matplotlib inline plt.rcParams["figure.dpi"] = 200 plt.imshow(imread("path_to_your_image")) print(plt.rcParams["figure.dpi"])
Поделиться 07 сентября 2022 в 09:58
В версиях Jupyter Notebook раньше 5.0 команда %matplotlib inline гарантирует, что графики Matplotlib отображаются встроенно внутри блокнота, непосредственно под ячейкой кода, которая его создала. Однако вам не нужно вызывать plt.show(), чтобы отображать графики при использовании %matplotlib inline1. После включения команды %matplotlib inline в ваш код, любые созданные вами графики Matplotlib автоматически отображаются встроенно внутри блокнота, без необходимости вызывать plt.show().
Плани отображаются в отдельных всплывающих окнах по умолчанию, когда мы вызываем plt.show(), не используя %matplotlib inline в версиях Jupyter Notebook раньше 5.0.
В Jupyter Notebook >= 5.0, —> В версиях Jupyter Notebook 5.0 и выше графики автоматически отображаются встроенно (не нужно писать %matplotlib inline). Использование plt.show() или не является необязательным для отображения графиков.
Поделиться 17 августа 2023 в 09:57
Это не обязательно писать. Для меня это работало отлично без магической функции ( %matplotlib ). Я использую компилятор Sypder, который поставляется в Anaconda.