Je voudrais créer un diagramme d'Argand à partir d'un ensemble de nombres complexes en utilisant matplotlib.
Existe-t-il des fonctions prédéfinies pour m'aider à faire cela?
Quelqu'un peut-il recommander une approche?
Je ne sais pas exactement ce que vous cherchez ici ... vous avez un ensemble de nombres complexes et vous souhaitez les mapper au plan en utilisant leur partie réelle comme coordonnée x et la partie imaginaire comme y?
Si tel est le cas, vous pouvez obtenir la partie réelle de tout nombre imaginaire python avec number.real
et la partie imaginaire avec number.imag
. Si vous utilisez numpy, il fournit également un ensemble de fonctions d’aide numpy.real et numpy.imag etc. qui fonctionnent sur des tableaux numpy.
Ainsi, par exemple, si vous avez stocké un tableau de nombres complexes, procédez comme suit:
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])
... tu peux juste faire
In [15]: fig,ax = subplots()
In [16]: ax.scatter(a.real,a.imag)
Ceci trace des points sur un diagramme d'argands pour chaque point.
edit: Pour la partie traçage, vous devez bien sûr avoir importé matplotlib.pyplot via from matplotlib.pyplot import *
ou (comme je l’ai fait) utiliser le shell ipython en mode pylab.
Pour faire suite à la réponse de l'inclination; la fonction suivante produit un graphique d'argands centré autour de 0,0 et mis à l'échelle à la valeur absolue maximale dans l'ensemble des nombres complexes.
J'ai utilisé la fonction de tracé et spécifié des lignes continues à partir de (0,0). Ceux-ci peuvent être supprimés en remplaçant ro-
par ro
.
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()
Par exemple:
>>> a = n.arange(5) + 1j*n.arange(6,11)
>>> from argand import argand
>>> argand(a)
produit:
MODIFIER:
Je viens de me rendre compte qu'il existe également une fonction polar
plot:
for x in a:
plt.polar([0,angle(x)],[0,abs(x)],marker='o')
import matplotlib.pyplot as plt
from numpy import *
'''
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
This draws the axis for argand diagram
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
'''
r = 1
Y = [r*exp(1j*theta) for theta in linspace(0,2*pi, 200)]
Y = array(Y)
plt.plot(real(Y), imag(Y), 'r')
plt.ylabel('Imaginary')
plt.xlabel('Real')
plt.axhline(y=0,color='black')
plt.axvline(x=0, color='black')
def argand(complex_number):
'''
This function takes a complex number.
'''
y = complex_number
x1,y1 = [0,real(y)], [0, imag(y)]
x2,y2 = [real(y), real(y)], [0, imag(y)]
plt.plot(x1,y1, 'r') # Draw the hypotenuse
plt.plot(x2,y2, 'r') # Draw the projection on real-axis
plt.plot(real(y), imag(y), 'bo')
[argand(r*exp(1j*theta)) for theta in linspace(0,2*pi,100)]
plt.show()
https://github.com/QuantumNovice/Matplotlib-Argand-Diagram/blob/master/argand.py