2013-07-03 8 views

Antwort

10

Ich bin mir nicht sicher, was genau Sie hier suchen ... Sie haben eine Menge komplexer Zahlen und wollen sie der Ebene zuordnen, indem Sie ihren realen Teil als x-Koordinate und den imaginären Teil als y verwenden ?

Wenn ja, können Sie den realen Teil einer beliebigen Python-imaginären Nummer mit number.real und den imaginären Teil mit number.imag bekommen. Wenn Sie numpy verwenden, bietet es auch eine Reihe von Hilfsfunktionen numpy.real und numpy.imag usw., die auf numpy Arrays funktionieren.

So zum Beispiel, wenn Sie eine Reihe von komplexen Zahlen haben etwas wie folgt gespeichert:

In [13]: a = n.arange(5) + 1j*n.arange(6,11) 

In [14]: a 
Out[14]: array([ 0. +6.j, 1. +7.j, 2. +8.j, 3. +9.j, 4.+10.j]) 

... Sie nur

tun können
In [15]: fig,ax = subplots() 

In [16]: ax.scatter(a.real,a.imag) 

Dies zeichnet Punkte auf einem argand Diagramm für jeden Punkt.

edit: Für den Plotteil müssen Sie natürlich matplotlib.pyplot über from matplotlib.pyplot import * importiert haben oder (wie ich es getan habe) die ipython-Shell im pylab-Modus verwenden.

+7

Versuchen zu vermeiden 'import *': es ist viel besser lesbar und weniger verwirrend, wenn Sie im aktuellen Namensraum nicht importieren und so etwas wie 'Import matplotlib.pyplot als plt' und dann' plt.'. Außerdem vermeidet dies mögliche Namenskonflikte –

4

Um zu folgen @ inclemens Antwort; Die folgende Funktion erzeugt ein Argand-Diagramm, das um 0,0 zentriert ist und auf den maximalen absoluten Wert in der Menge der komplexen Zahlen skaliert wird.

Ich verwendete die Plot-Funktion und spezifizierte durchgezogene Linien von (0,0). Diese können entfernt werden, indem ro- durch ro ersetzt wird.

def argand(a): 
    import matplotlib.pyplot as plt 
    import numpy as np 
    for x in range(len(a)): 
     plt.plot([0,a[x].real],[0,a[x].imag],'ro-',label='python') 
    limit=np.max(np.ceil(np.absolute(a))) # set limits for axis 
    plt.xlim((-limit,limit)) 
    plt.ylim((-limit,limit)) 
    plt.ylabel('Imaginary') 
    plt.xlabel('Real') 
    plt.show() 

Zum Beispiel:

>>> a = n.arange(5) + 1j*n.arange(6,11) 
>>> from argand import argand 
>>> argand(a) 

produziert: argand function output graph

EDIT:

Ich habe gerade realisiert gibt es auch eine polar Plotfunktion:

enter image description here