2013-10-18 14 views
5

Próbuję wykreślić rozrzut 3D z matplotlib Problem polega na tym, że nie mogę zmienić markera wielkości mam tomatplotlib marker rozrzut wielkości

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) 

Ale pojawia się błąd

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

Bez tego działka działa poprawnie. Gdzie jest problem? Czy istnieje inny sposób na zmianę rozmiaru?

Odpowiedz

8

Funkcja ta odbywa się w dwóch args przed args słów kluczowych:

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

I przechodzą w trzech, więc są określając s dwukrotnie (raz niejawnie i raz wyraźnie).

Właściwie, myślę, że próbujesz użyć funkcji wykresu punktowego 2D zamiast 3D. Prawdopodobnie chcesz to zrobić w zamian:

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

Może powinienem napisać to w moim poście, ale miałem 'rys = plt.figure()' i 'Ax = Axes3D (rys)' wcześniej. Nadal dostaję błąd, jeśli używam Axes3D.scatter: 'TypeError: niezwiązana metoda scatter() musi być wywołana z instancją Axes3D jako pierwszym argumentem (zamiast tego otrzymałem instancję listy)' –

+1

Przykro mi, wymyśliłem to, że robi ' ax = fig.add_subplot (111, rzut = '3d') ', a następnie' ax.scatter() ', nie dostaję już erro. Twoja odpowiedź sprawiła, że ​​uświadomiłem sobie, że może coś złego dzieje się z rozproszeniem. Dzięki za pomoc –