2013-10-18 11 views
5

Ich versuche, eine 3D-Streuung mit matplotlib Das Problem zu zeichnen ist, dass ich nicht die Größe der Markierung ändern ich dieseMatplotlib Streumarkergröße

scat = plt.scatter([boid_.pos[0] for boid_ in flock], 
       [boid_.pos[1] for boid_ in flock], [boid_.pos[2] for boid_ in flock], marker='o', s=5) 

haben aber ich habe den Fehler

TypeError: scatter() got multiple values for keyword argument 's' 

Ohne das funktioniert die Handlung gut. Wo ist das Problem? Oder gibt es eine andere Möglichkeit, die Größe zu ändern?

Antwort

8

Diese Funktion übernimmt in zwei args vor dem Schlüsselwort argumente:

scatter(x, y, s=20, ...)

Und Sie in drei sind vorbei, so geben Sie an, s zweimal (einmal implizit und einmal explizit).

Eigentlich glaube ich, dass Sie versuchen, die 2D-Streudiagramm-Funktion anstelle eines 3D zu verwenden. Sie wollen wahrscheinlich diese stattdessen tun:

from mpl_toolkits.mplot3d import Axes3D 
Axes3D.scatter(...) 
+0

Vielleicht sollte ich es in meinem Beitrag geschrieben habe, aber ich hatte 'Abb = plt.figure()' und 'ax = Axes3D (Bild)' vor. Ich habe immer noch einen Fehler, wenn ich Axes3D.scatter verwende: 'TypeError: Unbound-Methode scatter() muss mit Axes3D-Instanz als erstes Argument aufgerufen werden (hab stattdessen eine Listeninstanz)' –

+1

Es tut mir leid, ich habe herausgefunden, dass doing ' ax = fig.add_subplot (111, projektion = '3d') 'und dann' ax.scatter() ', ich bekomme keinen Fehler mehr. Deine Antwort ließ mich erkennen, dass ich vielleicht etwas mit der Streuung falsch gemacht hatte. Danke für Ihre Hilfe –