How to plot complex numbers (Argand Diagram) using matplotlib
I'm not sure exactly what you're after here...you have a set of complex numbers, and want to map them to the plane by using their real part as the x coordinate and the imaginary part as y?
If so you can get the real part of any python imaginary number with number.real
and the imaginary part with number.imag
. If you're using numpy, it also provides a set of helper functions numpy.real and numpy.imag etc. which work on numpy arrays.
So for instance if you had an array of complex numbers stored something like this:
In [13]: a = n.arange(5) + 1j*n.arange(6,11)In [14]: aOut[14]: array([ 0. +6.j, 1. +7.j, 2. +8.j, 3. +9.j, 4.+10.j])
...you can just do
In [15]: fig,ax = subplots()In [16]: ax.scatter(a.real,a.imag)
This plots dots on an argand diagram for each point.
edit: For the plotting part, you must of course have imported matplotlib.pyplot via from matplotlib.pyplot import *
or (as I did) use the ipython shell in pylab mode.
To follow up @inclement's answer; the following function produces an argand plot that is centred around 0,0 and scaled to the maximum absolute value in the set of complex numbers.
I used the plot function and specified solid lines from (0,0). These can be removed by replacing ro-
with 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()
For example:
>>> a = n.arange(5) + 1j*n.arange(6,11)>>> from argand import argand>>> argand(a)
produces:
EDIT:
I have just realised there is also a polar
plot function:
for x in a: plt.polar([0,angle(x)],[0,abs(x)],marker='o')
If you prefer a plot like the one below
or this one second type of plot
you can do this simply by these two lines (as an example for the plots above):
z=[20+10j,15,-10-10j,5+15j] # array of complex valuescomplex_plane2(z,1) # function to be called
by using a simple jupyter code from herehttps://github.com/osnove/other/blob/master/complex_plane.py
I have written it for my own purposes. Even better it it helps to others.