webentwicklung-frage-antwort-db.com.de

Anzeige drehbarer 3D-Diagramme in iPython oder iPython Notebook

(Mac OSX 10.10.5)

Ich kann von der Matplotlib-Website http://matplotlib.org/gallery.html#mplot3d den Beispielcode für ein 3D-Streudiagramm http://matplotlib.org/examples/mplot3d/scatter3d_demo) wiedergeben .html , die Darstellung wird jedoch als statisches Bild dargestellt. Ich kann nicht auf die Grafik klicken und dynamisch drehen, um die 3D-Daten anzuzeigen. 

Ich habe die statische 3D-Darstellung mithilfe des Beispielcodes erstellt - mit (a) ipython aus Terminal, (b) ipython notebook aus terminal und (c) ipython notebook, die vom Anaconda-Launcher aus gestartet wurden. 

Ich glaube, ich vermisse einen sehr grundlegenden Schritt als angenommenes Wissen. 

In der Vergangenheit hat das Plotten eine GUI-Python-App mit einem Diagramm-Viewer geöffnet. (Lösung 2 im unten gezeigten Code öffnet dies.) Vielleicht muss ich den Code kennen, um den Ausgabediagramm in diese Anzeigemethode zu exportieren? (Ja, verwenden Sie% matplotlib (nur) als erste Zeile ohne Inline oder Notizbuch, wie in den Kommentaren im nachstehenden Codeblock gezeigt.)

Als Beispiel in einem ipython-Notizbuch:

    # These lines are comments
    # Initial setup from an online python notebook tutorial is below. 
    # Note the first line "%matplotlib inline" this is how the tutorial has it.
    # Two solutions 1. use: "%matplotlib notebook" graphs appear dynamic in the notebook.
    #               2. use: "%matplotlib" (only) graphs appear dynamic in separate window. 
    #    ( 2. is the best solution for detailed graphs/plots. )

    %matplotlib inline  
    import pandas as pd
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D

    pd.set_option('html',False)
    pd.set_option('max_columns',30)
    pd.set_option('max_rows',10)


    # What follows is a copy of the 3D plot example code.
    # Data is randomly generated so there is no external data import.

    def randrange(n, vmin, vmax):
        return (vmax-vmin)*np.random.Rand(n) + vmin

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    n = 100
    for c, m, zl, zh in [('r', 'o', -60, -25), ('b', '^', -30, -5)]:
        xs = randrange(n, 23, 50)
        ys = randrange(n, 0, 100)
        zs = randrange(n, zl, zh)
        ax.scatter(xs, ys, zs, c=c, marker=m)

    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')

    plt.show()

Kann jemand feststellen, was mir fehlt?

In der Dokumentation zu Python 3.3.6, Abschnitt 25.1wird das Paket tkinter beschrieben.

Das Tkinter-Paket ("Tk-Schnittstelle") ist die Standard-Python-Schnittstelle zum Tk-GUI-Toolkit. Sowohl Tk als auch Tkinter sind auf den meisten Unix-Plattformen sowie auf Windows-Systemen verfügbar.

Ich denke jedoch, dass dies die Entwicklung von GUI-Programmen betrifft, daher bin ich mir nicht sicher, ob dies relevant ist. (Richtig, dies wurde für die Lösung nicht benötigt.) 

47
Cam_Aust

Verwenden Sie %matplotlib notebook anstelle von %matplotlib inline, um eingebettete interaktive Zahlen in das IPython-Notizbuch zu laden. Dies erfordert aktuelle Versionen von matplotlib (1.4+) und IPython (3.0+).

105
jakevdp

Für Windows (Windows 8.1 für mich) können Sie verwenden

%matplotlib inline  
%matplotlib notebook
%pylab

stattdessen.

Hinweis: Sie müssen ALLE DREI Befehl zusammen ausführen , oder Sie erhalten einen Fehler von kernal dead und das Notebook wird automatisch neu gestartet.

1
Statham

Für diejenigen, die noch weniger vertraut sind, wie ich, lautet die schnelle Antwort:

% matplotlib (über dem Import) (für interaktive Grafiken in neuem Fenster)

matplot importieren ... etc.

% matplotlib notebook (für die Grafikinteraktion innerhalb von JupyterNotebook

importieren etc ...

importieren etc ...

0
Alex

Unter Windows kann ich die Darstellung im interaktiven Modus anzeigen lassen, indem ich das Notizbuch mit den folgenden Schritten starte:

from matplotlib import use
use("Qt5Agg")
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
...

Fahren Sie Ihr Notebook bei Bedarf herunter und starten Sie es neu.

0
oscar1919