2010-02-19 23 views
21

Ich verwende matplotlib, dies zu tunPython: Wie 3D Graphen mit Python plotten?

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = Axes3D(fig) 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z') 

plt.show() 

Jetzt baut das eine Grafik, die im 3D-Raum horizontal ist. Wie mache ich das Diagramm vertikal, so dass es dem Benutzer zugewandt ist?

Ich möchte mehrere solcher vertikalen Grafiken erstellen, die durch eine bestimmte Entfernung getrennt sind und dem Benutzer zugewandt sind.

+0

Denken Sie daran, ist es nicht ein bisschen dumm, 3D-Grafiken zu verwenden, um 2D-Daten zu zeichnen? – badp

+2

Ich verändere einen bestimmten Parameter alpha (nicht x und y) und beobachte die Änderung in der Grafik für die verschiedenen Werte von Alpha – Bruce

Antwort

11

Antwort des bp fein funktionieren könnte, aber es gibt eine viel einfachere Art und Weise.

Ihr aktueller Graph ist auf der z-Achse "flach", weshalb er horizontal ist. Sie möchten, dass es vertikal ist, dh Sie möchten, dass es auf der y-Achse "flach" ist. Dies beinhaltet die kleinste Änderung an Ihrem Code:

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = Axes3D(fig) 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 
# put 0s on the y-axis, and put the y axis on the z-axis 
ax.plot(xs=x, ys=[0]*len(x), zs=y, zdir='z', label='ys=0, zdir=z') 
plt.show() 

Dann sind Sie auf einfache Weise mehrere solcher Grafiken durch die Verwendung unterschiedlicher Werte für die Parameter ys haben kann (zum Beispiel würde ys=[2]*len(x) stattdessen die Grafik setzen leicht hinter).

3

Gemäß der Dokumentation möchten Sie die ax.plot_surface(x,y,z) Methode verwenden. Weitere Informationen und Diagrammtypen here.

sollten folgende Arbeiten:

x = [1,2,3] 
y = [4,5,6] 
z = [7,8,9] 
data = zip(x,y,z) 

#map data on the plane 
X, Y = numpy.meshgrid(arange(0, max(x), 1), arange(0, max(y), 1)) 
Z = numpy.zeros((len(Y), len(X)), 'Float32') 
for x_,y_,z_ in data: 
    Z[x_, y_] = z_ #this should work, but only because x and y are integers 
       #and arange was done with a step of 1, starting from 0 
fig = p.figure() 
ax = p3.Axes3D(fig) 
ax.plot_surface(X, Y, Z) 
7

Mayavi, insbesondere das Modul mlab, bietet eine leistungsstarke 3D-Darstellung, die mit großen und/oder komplexen Daten arbeiten kann und einfach auf numply Arrays zu verwenden sein sollte.

7

Sie können den Ansichtswinkel des 3D-Plots mit der Funktion view_init() einstellen. Das folgende Beispiel bezieht sich auf Version 1.1 von matplotlib.

from mpl_toolkits.mplot3d import axes3d 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z') 
ax.view_init(90, -90) 
plt.show()