@complex.py

from __future__ import print_function
from os import path
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocatorFormatStrFormatter
from mpl_toolkits.mplot3d import Axes3D

ImgsPath = r'C:\CJS\prj\Python\ws\charts\imgs'
fn = 'complex.png'

function = lambda x,i: ((complex(x,i)**2) + complex(+4,0))

xmin,xmax =  -5.0,  +5.0
ymax,ymin = +25.0,  -5.0
zmax,zmin = +25.0, -25.0

xx = np.linspace(xminxmax100)
ii = np.linspace(-1.0, +1.041.0)

cs = [(-i,0,0if i<0 else (0,0,ifor i in ii]

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
#ax.set_xlim(xmin, xmax)
#ax.set_ylim(ymin, ymax)
#ax.set_zlim(zmin, zmax)
ax.xaxis.set_major_locator(MultipleLocator(1.0))
ax.yaxis.set_major_locator(MultipleLocator(5.0))
ax.zaxis.set_major_locator(MultipleLocator(10.0))
ax.xaxis.set_major_formatter(FormatStrFormatter('%+d'))
ax.yaxis.set_major_formatter(FormatStrFormatter('%+d'))
ax.zaxis.set_major_formatter(FormatStrFormatter('%+d'))
ax.tick_params(direction='out')
ax.grid(color='#7f7fbf')
ax.view_init(azim=-45.0elev=+17.0)

for ix,im in enumerate(4.0*ii):
    ns = [function(x,imfor x in xx]
    dy = [n.real for n in ns]
    dz = [n.imag for n in ns]
    ax.plot(xx,dy,dzcolor=cs[ix], lw=1.80alpha=0.50)

fig.set_figwidth(8.0)
fig.set_figheight(6.0)
fig.subplots_adjust(left=0.00bottom=0.00right=1.00top=1.00)
fig.savefig(path.join(ImgsPath,fn))
plt.show()