How to plot complex numbers (Argand Diagram) using matplotlib

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: argand function output graph

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')

enter image description here


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]: a
Out[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.


If you prefer a plot like the one below

one type of plot

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 values

complex_plane2(z,1) # function to be called

by using a simple jupyter code from here https://github.com/osnove/other/blob/master/complex_plane.py

I have written it for my own purposes. Even better it it helps to others.