интерактивный сюжет jupyterlab

Я начинаю использовать Jupyterlab из ноутбуков Jupyter. В записных книжках я использовал:

import matplotlib.pyplot as plt
%matplotlib notebook
plt.figure()
x = [1,2,3]
y = [4,5,6]
plt.plot(x,y)

для интерактивных сюжетов. Что теперь дает мне (в jupyterlab):

JavaScript output is disabled in JupyterLab

Я также пробовал магию (с установленным jupyter-matplotlib):

%matplotlib ipympl

Но это просто возвращается:

FigureCanvasNbAgg()

Встроенные графики:

%matplotlib inline

работают нормально, но мне нужны интерактивные сюжеты.


person Albatross    schedule 03.05.2018    source источник
comment
При использовании записных книжек Jupyter я обычно использую ›import matplotlib› matplotlib.use ('nbagg'), чтобы получить интерактивный график с функциями панорамирования / масштабирования. См .: matplotlib.org/users/prev_whats_new/   -  person tda    schedule 03.05.2018
comment
Однако это Jupyterlab. Использование этого метода также выводит JavaScript output is disabled in JupyterLab   -  person Albatross    schedule 03.05.2018
comment
Недавно у меня была такая же проблема. Попробуйте это: github.com/matplotlib/jupyter-matplotlib/issues/ < / а>   -  person Georgy    schedule 03.05.2018
comment
Что сработало для меня: 1.) используйте %matplotlib widget 2.) Убедитесь, что у вас установлена ​​версия Jupyter Lab ›1.0 и ipywidgets› 7.5, как указано здесь: github.com/matplotlib/jupyter-matplotlib/issues/133 3.) Откройте Jupyter Lab из терминала с помощью команды jupyter lab. Раньше я использовал программу, которая сокращала время для меня, поэтому мне не нужно было открывать терминал.   -  person NeStack    schedule 03.08.2019


Ответы (6)


Полные шаги

  1. Установите nodejs, например conda install nodejs.
  2. Установите ipympl, например pip install ipympl.
  3. [Необязательно, но рекомендуется; обновите JupyterLab, например,
    pip install --upgrade jupyterlab.]
  4. [Необязательно, но рекомендуется; для установки локального пользователя запустите:
    export JUPYTERLAB_DIR="$HOME/.local/share/jupyter/lab".]
  5. Установить расширения:

    jupyter labextension install @jupyter-widgets/jupyterlab-manager
    jupyter labextension install jupyter-matplotlib
    
  6. Включить виджеты: jupyter nbextension enable --py widgetsnbextension.

  7. Перезапустите JupyterLab.
  8. Украсить %matplotlib widget.

Не рекомендуется, но чтобы вслепую заставить расширение виджета работать в Anaconda, вы можете запустить следующее в окне терминала:

conda install -y nodejs
pip install ipympl
pip install --upgrade jupyterlab
jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter labextension install jupyter-matplotlib
jupyter nbextension enable --py widgetsnbextension
person Mateen Ulhaq    schedule 25.04.2019
comment
Матин, спасибо за составление шагов - зачем устанавливать jupyterlab-manager? - person N.M; 14.06.2019
comment
Существует проблема с некоторыми более старыми лабораторными версиями jupyter и пакетом пряжи nodejs (который jupyter использует для своей процедуры установки). В таком случае либо обновите вашу jupyter-lab, либо выполните следующее исправление: github.com/jupyter-widgets/ipywidgets/issues/ - person Simon Streicher; 22.07.2019
comment
Я добавил два необходимых шага в моей системе: (1) обновить jupyterlab, (2) включить nbextension. - person Simon Streicher; 22.07.2019
comment
Мне пришлось conda install widgetsnbextension -c conda-forge, прежде чем я смог включить widgetsnbextension (но затем я столкнулся с другими проблемами, когда jupyterlab была неправильной версией, а это совсем другая история ...) - person MD004; 23.08.2019
comment
перезагрузка была для меня важной инструкцией. Недостаточно выйти и снова запустить jupyterlab в терминале, только после перезагрузки компьютера графики наконец заработали - person NeStack; 18.01.2020
comment
Должен ли я выполнять эти инструкции по установке для каждой новой виртуальной среды conda, которую я создаю, или интерактивное построение графиков будет доступно для всех виртуальных сред, которые я использую? - person NeStack; 20.04.2020
comment
Предостережение: не забудьте выполнить plt.figure () перед следующим графиком, если вы пришли к этому из использования inline. - person volante; 06.08.2020
comment
Шаг 5 не выполняется с An error occured. ValueError: Please install nodejs >=12.0.0 before continuing. nodejs may be installed using conda or directly from the nodejs website. See the log file for details: /tmp/jupyterlab-debug-gklm270m.log. Использование pyenv для управления моими установками Python. - person Christoph90; 22.04.2021
comment
@ Christoph90 Похоже, вам нужно установить Node.js. - person Mateen Ulhaq; 22.04.2021
comment
Я выполнил все вышеперечисленное, но по-прежнему получаю сообщение об ошибке Javascript Error: Can't find variable: IPython - person Emy; 05.05.2021
comment
@Emy, какую версию JupyterLab вы используете? При использовании версии 3. * см. Мой ответ ниже. - person Paidoo; 06.05.2021
comment
Спасибо, мне удалось заставить его работать. Я сделал все вышеперечисленное, перезапустил компьютер, закрыл все серверы, затем открыл записную книжку на новом сервере, и теперь %matplotlib widget работает. - person Emy; 06.05.2021

Чтобы включить бэкэнд jupyter-matplotlib, используйте магию matplotlib Jupyter:

%matplotlib widget
import matplotlib.pyplot as plt
plt.figure()
x = [1,2,3]
y = [4,5,6]
plt.plot(x,y)

Подробнее см. jupyter-matplotlib на GitHub

Скриншот Jupyter Lab

person John    schedule 24.09.2018
comment
Я могу изобразить эту цифру, кнопки панорамирования и масштабирования можно нажимать, но ничего не происходит. он даже говорит мне панорамировать левой мышкой, но что-то происходит. Как это решить? - person wander95; 15.01.2019
comment
Трудно сказать, если вы работаете в Windows, попробуйте WinPython_3.6, доступный по адресу sourceforge.net/projects/winpython / files, как в примере, показанном выше. - person John; 16.01.2019
comment
Мне удалось решить эту проблему, переустановив все, выполнив действия, указанные в github.com/matplotlib/jupyter-matplotlib < / а>. Совет: не смешивайте для этого conda и pip. - person wander95; 16.01.2019
comment
у вас есть возможность построить график без plt.figure () в начале. Это возможно, если мы используем встроенный бэкэнд, но не с виджетами или блокнотами. - person Namit Juneja; 27.02.2020

Согласно предложению Георгия, это было вызвано тем, что Node.js не был установлен.

person Albatross    schedule 09.05.2018

Шаги для JupyterLab 3. *

Ранее я использовал Mateen 10705616 "> ответ несколько раз, но когда я попробовал их с JupyterLab 3.0.7, я обнаружил, что jupyter labextension install @jupyter-widgets/jupyterlab-manager вернул ошибку и у меня были неработающие виджеты.

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

Шаги теперь упрощены, и я смог вернуться к работе с интерактивными графиками со следующим:

  1. pip install jupyterlab
  2. pip install ipympl
  3. Украсить %matplotlib widget

Шаг 2 автоматически позаботится об остальных зависимостях, включая замену (теперь уже обесценившейся?) @jupyter-widgets/jupyterlab-manager

Надеюсь, это сэкономит время кому-то еще!

person Paidoo    schedule 17.02.2021
comment
Этот комментарий является текущим правильным ответом, если вы устанавливаете. На моей машине (Jupyterlab3, python3.9) jupyterlab-manager фактически нарушает функциональность виджета. - person catalogue_number; 09.06.2021

Это решение работает в jupyterlab.

import numpy as np
import matplotlib.pyplot as plt
from IPython.display import clear_output


n = 10
a = np.zeros((n, n))
plt.figure()

for i in range(n):
    plt.imshow(a)
    plt.show()
    a[i, i] = 1
    clear_output(wait=True)
person Aray Karjauv    schedule 04.04.2020

Резюме

В сложной настройке, когда процесс jupyter-lab и процесс ядра Jupyter / IPython работают в разных виртуальных средах Python, обратите внимание на версии пакета Python и расширения Jupyter (например, ipympl, jupyter-matplotlib), связанных с Jupyter, и их совместимость между средами.

И даже в одной виртуальной среде Python убедитесь, что вы соблюдаете _ 4_ таблица совместимости.

Пример

Пара примеров, как запустить JupyterLab.

Простой (ул)

Думаю, самый простой кроссплатформенный способ запустить JupyterLab - это запустить его из контейнера Docker. Вы можете создать и запустить контейнер JupyterLab 3 следующим образом.

docker run --name jupyter -it -p 8888:8888 \
  # This line on a Linux- and non-user-namespaced Docker will "share"
  # the directory between Docker host and container, and run from the user.
  -u 1000 -v $HOME/Documents/notebooks:/tmp/notebooks \
  -e HOME=/tmp/jupyter python:3.8 bash -c "
    mkdir /tmp/jupyter; \
    pip install --user 'jupyterlab < 4' 'ipympl < 0.8' pandas matplotlib; \
    /tmp/jupyter/.local/bin/jupyter lab --ip=0.0.0.0 --port 8888 \
      --no-browser --notebook-dir /tmp/notebooks;
  "

Когда он закончится (а это займет некоторое время), самые нижние строки в терминале должны выглядеть примерно так:

    To access the server, open this file in a browser:
    ...
        http://127.0.0.1:8888/lab?token=abcdef...

Вы можете просто щелкнуть по этой ссылке, и JupyterLab должен открыться в вашем браузере. Как только вы выключите экземпляр JupyterLab, контейнер остановится. Вы можете перезапустить его с помощью docker start -ai jupyter.

jupyterlab 3

Сложный

Этот GitHub Gist иллюстрирует идею создания виртуальной среды Python с помощью JupyterLab 2, а также создания всего необходимые расширения с Nodejs в контейнере, без установки Nodejs в хост-системе. В JupyterLab 3 и предварительная сборка расширений этот подход становится менее актуальным.

Контекст

Сегодня я чесал голову во время отладки %matplotlib widget, не работающего в JupyterLab 2. У меня есть отдельный предварительно собранный JupyterLab venv (как описано выше), который поддерживает локальный JupyterLab в качестве режима приложения Chromium (т.е. c.LabApp.browser = 'chromium-browser --app=%s' в конфигурации), и несколько ядер IPython. из простых venv Python с конкретными зависимостями (редко меняются) и приложения, раскрывающего себя как ядро ​​IPython. Проблема с режимом интерактивного виджета проявляется по-разному.

Например, имея

  • в хосте JupyterLab venv: расширение jupyter-matplotlib v0.7.4 и ipympl==0.6.3

  • в ядре venv: ipympl==0.7.0 и matplotlib==3.4.2

В консоли браузера у меня были такие ошибки:

  • Error: Module jupyter-matplotlib, semver range ^0.9.0 is not registered as a widget module
  • Error: Could not create a model.
  • Could not instantiate widget

В пользовательском интерфейсе JupyterLab:

  • %matplotlib widget успешно перезапускается
  • Графики застряли в виджете "Загрузка" ...
  • Ничего не происходит при повторном запуске ячейки с выводом диаграммы
  • При предыдущих попытках %matplotlib widget мог поднять что-то вроде KeyError: '97acd0c8fb504a2288834b349003b4ae'

При понижении версии ipympl==0.6.3 в ядре venv в консоли браузера:

  • Could not instantiate widget
  • Exception opening new comm
  • Error: Could not create a model.
  • Module jupyter-matplotlib, semver range ^0.8.3 is not registered as a widget module

Как только я сделал пакеты / расширения в соответствии с _ 24_ таблица совместимости:

  • в хосте JupyterLab venv: расширение jupyter-matplotlib v0.8.3, ipympl==0.6.3

  • в ядре venv: ipympl==0.6.3, matplotlib==3.3.4

Это более или менее работает так, как ожидалось. Ну, есть очень мелкие сбои, например, за исключением того, что я помещаю %matplotlib widget на ячейку с диаграммой, скажем, при перезапуске первая диаграмма накапливает все содержимое всех диаграмм в записной книжке. При %matplotlib widget на ячейку одновременно активна только одна диаграмма. И при перезапуске отображается только последний виджет (но ручной повторный запуск ячейки исправляет).

person saaj    schedule 05.06.2021