2016-06-08 10 views
1

So, jetzt habe ich alle diese Koordinaten und so ist es ziemlich einfach, ein 3D-Streudiagramm aller Kombination von Koordinaten zu erstellen.Wie kann ich Punkte in einem 3D-Streudiagramm verbinden?

fig = plt.figure(figsize=(20,10)) 
ax = plt.axes(projection='3d') 

z = numpy.transpose(z_coords_row)[0:100] 
x = numpy.transpose(x_coords_row)[0:100] 
y = numpy.transpose(y_coords_row)[0:100] 

plt.xticks(numpy.arange(-1.5, 1.5, .25)) 
plt.yticks(numpy.arange(-1.5, 1.5, .5)) 

ax.scatter(x, y, z,s=1) 
ax.view_init(elev=10., azim=45) 

Dieser Code gibt mir ein Ergebnis wie so: http://i.stack.imgur.com/KKw1D.png

ich in viele Probleme ausgeführt haben versucht, jeden Punkt mit einer Linie zum nächsten Punkt in der Folge zu verbinden. Wie gehe ich vor, jeden Punkt mit dem nächsten im Array zu verbinden, so dass es ein glattes Liniendiagramm ist?

+0

Ich weiß nichts über 3D-Charts ... aber ich weiß, dass dieser Prozess 'interpolation' genannt wird. Laut Wiki ist Interpolation eine Methode, um neue Datenpunkte innerhalb des Bereichs einer diskreten Menge bekannter Datenpunkte zu konstruieren. Vielleicht hilft dir dieses neue Keyword. –

+0

Von dem, was ich bisher verwendet habe, funktioniert die Interpolation nur für 1D und gibt nur mehr Sätze von Punkten statt einer Linie? Jeder kann mich korrigieren, wenn ich falsch liege –

+0

http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.interpolate.griddata.html –

Antwort

3

Wenn Sie genug Punkte nur mit Ihren Koordinaten haben, denke ich, was Sie suchen, ist plot3D. Wenn Sie eine weichere Linie benötigen, kann es sich lohnen, in scipy.interpolate.RegularGridInterpolator zu suchen, was dazu beitragen würde, mehr Punkte zu generieren, die Sie dann in plot3D einfügen könnten.

Beispiel für die Verwendung von plot3D:

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

fig = plt.figure(figsize=(20,10)) 
ax = plt.axes(projection='3d') 

z_coords_row = numpy.sin(numpy.linspace(0,2*numpy.pi,100))+5 
x_coords_row = numpy.sin(numpy.linspace(0,2*numpy.pi,100)) 
y_coords_row = numpy.cos(numpy.linspace(0,2*numpy.pi,100)) 

z = numpy.transpose(z_coords_row)[0:100] 
x = numpy.transpose(x_coords_row)[0:100] 
y = numpy.transpose(y_coords_row)[0:100] 

plt.xticks(numpy.arange(-1.5, 1.5, .25)) 
plt.yticks(numpy.arange(-1.5, 1.5, .5)) 

ax.scatter(x, y, z,s=5) 
ax.plot3D(x,y,z) 
ax.view_init(elev=10., azim=45) 

enter image description here

+0

Wenn ich versuche mit der ax.plot3D (x, y, z), es gibt mir den Fehler: 'ValueError: Third Arg muss eine Formatzeichenfolge sein'. Benutze ich es falsch? –

+0

@JesseBatson Können Sie überprüfen, dass der Typ Ihrer 'Axt'' matplotlib.axes._subplots.Axes3DSubplot'' ist? –

+0

Es verifiziert, dass