(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.)
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+).
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.
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 ...
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.