jupyterlab interaktiver Plot

Lesezeit: 7 Minuten

jupyterlab interaktiver Plot
Albatros

Ich beginne mit der Verwendung von Jupyterlab von Jupyter-Notebooks. In Notebooks habe ich verwendet:

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

für interaktive Plots. Was mir jetzt (in jupyterlab) gibt:

JavaScript output is disabled in JupyterLab

Ich habe auch die Magie ausprobiert (mit jupyter-matplotlib Eingerichtet):

%matplotlib ipympl

Aber das kommt einfach zurück:

FigureCanvasNbAgg()

Inline-Plots:

%matplotlib inline

funktionieren gut, aber ich möchte interaktive Plots.

  • Bei der Verwendung von Jupyter-Notebooks tendiere ich dazu, > import matplotlib > matplotlib.use(‘nbagg’) zu verwenden, um einen interaktiven Plot mit Pan/Zoom-Funktionalität zu erhalten. Sehen: matplotlib.org/users/prev_whats_new/…

    – tda

    3. Mai ’18 um 7:48


  • Dies ist jedoch Jupyterlab. Mit dieser Methode werden auch Ausgaben JavaScript output is disabled in JupyterLab

    – Albatros

    3. Mai ’18 um 7:51


  • Ich hatte vor kurzem das gleiche Problem. Versuche dies: github.com/matplotlib/jupyter-matplotlib/issues/…

    – Georgi

    3. Mai ’18 um 7:54

  • Was bei mir funktioniert hat: 1.) verwenden %matplotlib widget 2.) Stellen Sie sicher, dass Sie Jupyter Lab Version > 1.0 und ipywidgets > 7.5 installiert haben, wie hier empfohlen: github.com/matplotlib/jupyter-matplotlib/issues/133 3.) Öffnen Sie Jupyter Lab vom Terminal aus mit dem Befehl jupyter lab. Ich habe vorher ein Programm benutzt, das für mich eine Abkürzung erstellt hat, damit ich das Terminal nicht öffnen muss

    – NeStack

    3. August ’19 um 18:43


jupyterlab interaktiver Plot
Mateen Ulhaq

JupyterLab 3.0+

  1. Installieren jupyterlab und ipympl.

    Für pip Benutzer:

    pip install --upgrade jupyterlab ipympl
    

    Für conda Benutzer:

    conda update -c conda-forge jupyterlab ipympl
    
  2. Starten Sie JupyterLab neu.

  3. Verzieren Sie die Zelle mit dem Plottercode mit der Kopfzeile:

    %matplotlib widget
    
    # plotting code goes here
    

JupyterLab 2.0

  1. Installieren nodejs, z.B conda install -c conda-forge nodejs.

  2. Installieren ipympl, z.B conda install -c conda-forge ipympl.

  3. [Optional, but recommended.] Aktualisieren Sie JupyterLab, zB
    conda update -c conda-forge jupyterlab==2.2.9==py_0.

  4. [Optional, but recommended.] Führen Sie für eine lokale Benutzerinstallation Folgendes aus:
    export JUPYTERLAB_DIR="$HOME/.local/share/jupyter/lab".

  5. Erweiterungen installieren:

     jupyter labextension install @jupyter-widgets/jupyterlab-manager
     jupyter labextension install jupyter-matplotlib
    
  6. Widgets aktivieren: jupyter nbextension enable --py widgetsnbextension.

  7. Starten Sie JupyterLab neu.

  8. Dekorieren mit %matplotlib widget.

  • Mateen, vielen Dank für das Kompilieren der Schritte – warum ist es notwendig, den jupyterlab-manager zu installieren?

    – Nm

    14. Juni ’19 um 17:32

  • Es gibt ein Problem mit einigen älteren jupyter-Laborversionen und dem nodejs-Garnpaket (das jupyter für seinen Installationsvorgang verwendet). In einem solchen Fall aktualisieren/aktualisieren Sie entweder Ihr jupyter-lab oder folgen Sie diesem Fix: github.com/jupyter-widgets/ipywidgets/issues/…

    – Simon Streicher

    22. Juli ’19 um 5:17

  • Ich habe zwei Schritte hinzugefügt, die auf meinem System erforderlich waren: (1) jupyterlab aktualisieren, (2) nbextension aktivieren.

    – Simon Streicher

    22. Juli ’19 um 7:08

  • Ich musste conda install widgetsnbextension -c conda-forge bevor ich widgetsnbextension aktivieren konnte (aber dann stieß ich auf andere Probleme mit jupyterlab als falsche Version, was eine andere Geschichte ist …)

    – MD004

    22. August ’19 um 23:25

  • “restart” war für mich die kritische Anweisung. Es hat nicht gereicht, jupyterlab im Terminal zu beenden und neu zu starten, erst nach einem Neustart des Computers funktionierten die Plots endlich

    – NeStack

    18. Januar ’20 um 11:30 Uhr

Um das jupyter-matplotlib-Backend zu aktivieren, verwenden Sie die Matplotlib-Jupyter-Magie:

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

Mehr Infos hier jupyter-matplotlib auf GitHub

Screenshot Jupyter Lab

  • Ich kann diese Figur zeichnen, die Pan-Zoom-Tasten können gedrückt werden, aber es passiert nichts. es sagt mir sogar “mit der linken Maus schwenken”, aber es passiert. Wie kann man das lösen?

    – wandern95

    15. Januar ’19 um 20:03

  • Schwer zu sagen, wenn Sie unter Windows arbeiten, versuchen Sie WinPython_3.6, verfügbar unter sourceforge.net/projects/winpython/files wie für das oben gezeigte Beispiel verwendet.

    – John

    16. Januar ’19 um 9:41


  • Ich konnte dies lösen, indem ich die Dinge neu installierte, indem ich die Schritte in befolgte github.com/matplotlib/jupyter-matplotlib. Tipp: Mischen Sie dafür nicht Conda und Pip.

    – wandern95

    16. Januar ’19 um 15:36 Uhr

  • tun Sie, wenn es möglich ist, ohne plt.figure() am Anfang zu plotten. Es ist möglich, wenn wir Inline-Backend verwenden, aber nicht mit Widget- oder Notebook-Backend

    – Namit Juneja

    26. Februar ’20 um 23:15

jupyterlab interaktiver Plot
Albatros

Laut Georgys Vorschlag wurde dies dadurch verursacht, dass Node.js nicht installiert wurde.

1641822738 78 jupyterlab interaktiver Plot
Paidoo

Schritte für JupyterLab 3.*

Ich hatte Mateens Antwort zuvor mehrmals verwendet, aber als ich sie mit JupyterLab 3.0.7 ausprobierte, fand ich das jupyter labextension install @jupyter-widgets/jupyterlab-manager gab einen Fehler zurück und ich hatte kaputte Widgets.

Nach viel Kopfzerbrechen und Googeln dachte ich, ich poste die Lösung für alle anderen, die sich hier wiederfinden.

Die Schritte sind jetzt vereinfacht und ich konnte mit folgenden Schritten wieder interaktive Plots bearbeiten:

  1. pip install jupyterlab
  2. pip install ipympl
  3. Dekorieren mit %matplotlib widget

Schritt 2 kümmert sich automatisch um den Rest der Abhängigkeiten, einschließlich der Ersetzungen für (die jetzt abgeschriebenen?) @jupyter-widgets/jupyterlab-manager

Hoffe das spart jemand anderem etwas Zeit!

Zusammenfassung

In einem komplexen Setup, bei dem jupyter-lab -Prozess und der Jupyter/IPython-Kernelprozess in verschiedenen virtuellen Python-Umgebungen ausgeführt werden, achten Sie auf das Jupyter-bezogene Python-Paket und die Jupyter-Erweiterung (z ipympl, jupyter-matplotlib)-Versionen und deren Kompatibilität zwischen den Umgebungen.

Und selbst in einer einzelnen virtuellen Python-Umgebung stellen Sie sicher, dass Sie die ipympl Kompatibilitätstabelle.

Beispiel

Ein paar Beispiele für die Ausführung von JupyterLab.

Einfach(st)

Die einfachste plattformübergreifende Möglichkeit, JupyterLab auszuführen, besteht meiner Meinung nach darin, es über einen Docker-Container auszuführen. Sie können den JupyterLab 3-Container auf diese Weise erstellen und ausführen.

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;
  "

Wenn es fertig ist (und es wird eine Weile dauern), sollten die untersten Zeilen im Terminal etwa so aussehen.

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

Sie können einfach auf diesen Link klicken und JupyterLab sollte sich in Ihrem Browser öffnen. Sobald Sie die JupyterLab-Instanz herunterfahren, wird der Container angehalten. Sie können es neu starten mit docker start -ai jupyter.

jupyterlab 3

Komplex

Dies GitHub-Grundlagen veranschaulicht die Idee, wie man mit JupyterLab 2 eine virtuelle Python-Umgebung erstellt und alle erforderlichen Erweiterungen mit Nodejs im Container erstellt, ohne Nodejs auf dem Hostsystem zu installieren. Mit JupyterLab 3 und vorgefertigte Erweiterungen dieser Ansatz verliert an Relevanz.

Kontext

Ich habe mir heute beim Debuggen den Kopf gekratzt %matplotlib widget funktioniert nicht in JupyterLab 2. Ich habe ein separates vorgefertigtes JupyterLab-Venv (wie oben beschrieben), das lokales JupyterLab als Chromium-“App-Modus” (dh c.LabApp.browser="chromium-browser --app=%s" in der Konfiguration) und ein paar IPython-Kernel von einfachen Python-Venvs mit spezifischen Abhängigkeiten (selten ändern) und eine Anwendung, die sich selbst als IPython-Kernel enthüllt. Das Problem mit dem interaktiven “Widget”-Modus manifestierte sich auf unterschiedliche Weise.

Zum Beispiel mit

  • in JupyterLab “host” venv: jupyter-matplotlib v0.7.4 Erweiterung und ipympl==0.6.3

  • im Kernel-Venv: ipympl==0.7.0 und matplotlib==3.4.2

In der Browserkonsole hatte ich diese Fehler:

  • 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

In der JupyterLab-Benutzeroberfläche:

  • %matplotlib widget gelingt beim Neustart
  • Diagramme stecken in “Widget wird geladen…”
  • Nichts beim erneuten Ausführen der Zelle mit Diagrammausgabe
  • Bei früheren Versuchen %matplotlib widget könnte etwas erhöhen wie KeyError: '97acd0c8fb504a2288834b349003b4ae'

Bei Herabstufung von ipympl==0.6.3 im Kernel venv in der Browserkonsole:

  • 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

Einmal habe ich die Pakete/Erweiterungen nach ipympl Kompatibilitätstabelle:

  • in JupyterLab “host” venv: jupyter-matplotlib v0.8.3-Erweiterung, ipympl==0.6.3

  • im Kernel-Venv: ipympl==0.6.3, matplotlib==3.3.4

Es funktioniert mehr oder weniger wie erwartet. Nun, es gibt einige kleinere Pannen, außer ich stelle %matplotlib widget pro Zelle mit Diagramm, sagen wir beim Neustart, “akkumuliert” das erste Diagramm den gesamten Inhalt aller Diagramme im Notebook. Mit %matplotlib widget pro Zelle ist jeweils nur ein Diagramm “aktiv”. Und beim Neustart wird nur das letzte Widget gerendert (aber die manuelle erneute Ausführung einer Zelle behebt Abhilfe).

jupyterlab interaktiver Plot
Aray Karjauv

Dies Lösung funktioniert in 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)

.

307130cookie-checkjupyterlab interaktiver Plot

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy