Ich verwende Jupyter Notebook, um Datensätze zu analysieren. Das Notizbuch enthält viele Diagramme, von denen einige 3D-Diagramme sind.
Ich frage mich, ob es möglich ist, die 3D-Handlung interaktiv zu gestalten, damit ich später genauer damit spielen kann.
Vielleicht können wir einen Button hinzufügen? Wenn Sie darauf klicken, wird ein 3D-Plot ausgeblendet und Personen können zoomen, schwenken, drehen usw.
Meine Gedanken:
1. Matplotlib,% qt
Dies passt nicht zu meinem Fall, da ich den Plot nach dem 3D-Plot fortsetzen muss. %qt
wird spätere Handlungen stören.
2. mpld3
mpld3
ist in meinem Fall fast ideal, keine Notwendigkeit, etwas neu zu schreiben, kompatibel mit matplotlib. Es wird jedoch nur 2D-Plot unterstützt. Und ich habe keinen Plan für 3D gesehen ( https://github.com/mpld3/mpld3/issues/223 ).
3. Bokeh + Visjs
Ich habe kein aktuelles Beispiel für eine 3D-Handlung in der bokeh
Galerie gefunden. Ich finde nur https://demo.bokeh.org/surface3d , das verwendet visjs
.
4. Javascript 3D-Plot?
Ist es möglich, die Daten mit js im Browser an js plot zu übergeben, um sie interaktiv zu machen, da ich nur Linie und Sicherheit benötige? (Dann müssen wir möglicherweise auch die 3D-Achse hinzufügen.) Dies kann ähnlich sein wie visjs
und mpld3
.
quelle
%matplotlib notebook
inline
undnotebook
in einem jupyter Notebook?notebook
. Schreiben Sie den Kommentar einfach als Antwort um, damit andere ihn leichter finden können.Antworten:
Versuchen:
%matplotlib notebook
Siehe jakevdp Antwort hier
BEARBEITEN für JupyterLab-Benutzer:
Befolgen Sie die Anweisungen zum Installieren von jupyter-matplotlib
Dann wird der obige magische Befehl nicht mehr benötigt, wie im Beispiel:
# Enabling the `widget` backend. # This requires jupyter-matplotlib a.k.a. ipympl. # ipympl can be install via pip or conda. %matplotlib widget # aka import ipympl import matplotlib.pyplot as plt plt.plot([0, 1, 2, 2]) plt.show()
Beachten Sie abschließend die Antwort von Maarten Breddels . IMHO ipyvolume ist in der Tat sehr beeindruckend (und nützlich!).
quelle
notebook
?%matplotlib notebook
und%matplotlib inline
2 wechseln ? Die Ausführung meines Notebooks dauert lange (5 Minuten). Mit%matplotlib notebook
wird gerendert, nachdem alle Zellen fertiggestellt wurden, und nicht, nachdem eine Zelle fertiggestellt wurde.inline
Betten Sie ein automatisch generiertes statisches PNG ein, währendnotebook
Sie mit einem Bild a la Matplotlib herumspielen können, bis Sie auf die Schaltfläche "Herunterfahren" klicken und zum statischen Bild wechseln. Ich hätte nach einem automatischen "Herunterfahren" -Befehl gesucht, der in den Feigen platziert würde, in denen Sie den interaktiven Modus nicht benötigen. Ich weiß nicht, ob dies zu diesem Zeitpunkt umgesetzt wird.Es gibt eine neue Bibliothek namens ipyvolume , die tun kann, was Sie wollen. Die Dokumentation zeigt Live-Demos . Die aktuelle Version macht keine Meshes und Lines, aber der Master aus dem Git Repo (wie auch Version 0.4). (Haftungsausschluss: Ich bin der Autor)
quelle
Sie können mit Plotly Bibliothek gehen. Es kann interaktive 3D-Diagramme direkt in Jupyter-Notizbüchern rendern.
Dazu müssen Sie zuerst Plotly installieren, indem Sie Folgendes ausführen:
Möglicherweise möchten Sie die Bibliothek auch aktualisieren, indem Sie Folgendes ausführen:
Danach können Sie in Ihr Jupyter-Notizbuch etwas schreiben wie:
# Import dependencies import plotly import plotly.graph_objs as go # Configure Plotly to be rendered inline in the notebook. plotly.offline.init_notebook_mode() # Configure the trace. trace = go.Scatter3d( x=[1, 2, 3], # <-- Put your data instead y=[4, 5, 6], # <-- Put your data instead z=[7, 8, 9], # <-- Put your data instead mode='markers', marker={ 'size': 10, 'opacity': 0.8, } ) # Configure the layout. layout = go.Layout( margin={'l': 0, 'r': 0, 'b': 0, 't': 0} ) data = [trace] plot_figure = go.Figure(data=data, layout=layout) # Render the plot. plotly.offline.iplot(plot_figure)
Als Ergebnis wird das folgende Diagramm für Sie in Jupyter Notebook aufgezeichnet und Sie können damit interagieren. Natürlich müssen Sie Ihre spezifischen Daten anstelle der vorgeschlagenen angeben.
quelle
Plotly fehlt in dieser Liste. Ich habe die Python-Bindungsseite verlinkt. Es hat definitiv animierte und interaktive 3D-Diagramme. Und da es Open Source ist, ist das meiste davon offline verfügbar. Natürlich funktioniert es mit Jupyter
quelle
Eine Lösung, die ich gefunden habe, ist die Verwendung einer vis.js- Instanz in einem Iframe. Dies zeigt ein interaktives 3D-Diagramm in einem Notizbuch, das in nbviewer weiterhin funktioniert . Der visjs Code aus dem Beispielcode auf der 3D - Grafik entlehnt Seite
Ein kleines Notizbuch zur Veranschaulichung: Demo
Der Code selbst:
from IPython.core.display import display, HTML import json def plot3D(X, Y, Z, height=600, xlabel = "X", ylabel = "Y", zlabel = "Z", initialCamera = None): options = { "width": "100%", "style": "surface", "showPerspective": True, "showGrid": True, "showShadow": False, "keepAspectRatio": True, "height": str(height) + "px" } if initialCamera: options["cameraPosition"] = initialCamera data = [ {"x": X[y,x], "y": Y[y,x], "z": Z[y,x]} for y in range(X.shape[0]) for x in range(X.shape[1]) ] visCode = r""" <link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" type="text/css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script> <div id="pos" style="top:0px;left:0px;position:absolute;"></div> <div id="visualization"></div> <script type="text/javascript"> var data = new vis.DataSet(); data.add(""" + json.dumps(data) + """); var options = """ + json.dumps(options) + """; var container = document.getElementById("visualization"); var graph3d = new vis.Graph3d(container, data, options); graph3d.on("cameraPositionChange", function(evt) { elem = document.getElementById("pos"); elem.innerHTML = "H: " + evt.horizontal + "<br>V: " + evt.vertical + "<br>D: " + evt.distance; }); </script> """ htmlCode = "<iframe srcdoc='"+visCode+"' width='100%' height='" + str(height) + "px' style='border:0;' scrolling='no'> </iframe>" display(HTML(htmlCode))
quelle
Für die 3D -Visualisierung ist Pythonreejs wahrscheinlich der beste Weg, um im Notebook zu arbeiten. Es nutzt die interaktive Widget-Infrastruktur des Notebooks, sodass die Verbindung zwischen JS und Python nahtlos ist.
Eine erweiterte Bibliothek ist bqplot , eine d3-basierte interaktive Bibliothek für das iPython-Notebook, jedoch nur 2D
quelle