Mathematica 6.0 code to 
graph a complex function

ComplexGraph[f_,xmin_,xmax_,ymin_,ymax_,points_:100] := 
(* f is the complex function to be graphed in the region
[xmin,xmax] × [ymin,ymax]. 
The parameter points controls how many points will be
 sampled in each direction; good values are 100-500. *)
RegionPlot[True,{x,xmin,xmax},{y,ymin,ymax},
ColorFunction->Function[{x,y},
Hue[Mod[Arg[f[x+I*y]],2Pi]/(2Pi),
1/(1+0.3Log[Abs[f[x+I*y]]+1]),
1-1/(1.1+5Log[Abs[f[x+I*y]]+1])]],
ColorFunctionScaling->False,
AspectRatio->Automatic,
PlotPoints->points]

The idea comes from Jan Homann, who uploaded a picture of the Riemann Zeta function to Wikipedia.

The following is the color function used for all our examples. The argument of a complex value is encoded by the hue of a color (red = positive real, and then counterclockwise through yellow, green, cyan, blue and purple; cyan stands for negative real). Strong colors denote points close to the origin, black = 0, weak colors denote points with large absolute value, white = ∞.

ComplexGraph[Function[z,z],-50,50,-50,50,100]

Here is a picture of f(z)=(z^3).  The color of the point z encodes the value f(z) according to the above color function:

ComplexGraph[Function[z,z^3],-10,10,-10,10,200]

A fourth-degree polynomial, with three zeros of order 1 and one zero of order 2:

ComplexGraph[Function[z,z(z-I)(z-3)(z-1+I)^2],-5,5,-5,5,200]

The sine-function. Note that it is periodic in x-direction, but growing in positive and negative y-direction. As expected, only red and cyan on the real axis. Also note that in the upper half plane the order of the colors is reversed compared to the lower half-plane. Who knew? Well I guess it follows from the fact that the Taylor coefficients of sin(z) are all real, and so sin((OverBar[z]))=(OverBar[sin(z)]).

ComplexGraph[Sin,-2Pi,2Pi,-15,15,200]

The exponential function. Nice and periodic in y-direction, growing in x-direction:

ComplexGraph[Exp,-10,10,-10,10,200]

The logarithm near the interesting spots z=0 (pole) and z=1 (zero).

ComplexGraph[Log,-2,2,-2,2,200]

The clearly visible branch cut on the negative real axis is an artifact; the natural domain of the logarithm is its Riemann surface:

ParametricPlot3D[{r*Cos[theta],r*Sin[theta],theta/3},{theta,-3Pi,3Pi},{r,0,4},PlotPoints->100,Mesh->None,
ColorFunctionScaling->False,ColorFunction->Function[{x,y,z,theta,r},Hue[Mod[Arg[I*theta+Log[r]],2Pi]/(2Pi),
1/(1+0.3Log[Abs[I*theta+Log[r]]+1]),
1-1/(1.1+5Log[Abs[I*theta+Log[r]]+1])]]]

Here's the graph of the square-root function on its natural domain:

ParametricPlot3D[{r*Cos[theta],r*Sin[theta],r /2* Cos[theta/2]},{theta,0,4Pi},{r,0,3},
PlotPoints->100,Mesh->None,
ColorFunctionScaling->False,ColorFunction->Function[{x,y,z,theta,r},Hue[Mod[theta/2,2Pi]/(2Pi),
1/(1+0.3Log[Abs[Sqrt[r]]+1]),
1-1/(1.1+5Log[Abs[Sqrt[r]]+1])]]]

A rational function with one pole of order 1, one pole of order 3, a zero of order 2, and three zeros of order 1.

ComplexGraph[Function[z,(z+3+5I)^2*(1/z+I/(z-5+3I)^3)],-10,10,-10,10,200]

f(z)=(e^(1/z)) has an essential singularity at z=0. From this picture it is not hard to imagine that the function takes on all non-zero values infinitely often in every neighborhood of 0 (Picard's big theorem):

ComplexGraph[Function[z,Exp[1/z]],-1,1,-1,1,200]

The Riemann ζ-function. Note the pole of order 1 at z=1 and the zeros of order 1 on the negative real axis and on the critical line Re(z)=1/2. The function is pretty boring (close to 1) for Re(z)>1, where it was originally defined.

ComplexGraph[Zeta,-40,20,-40,40,400]

The ζ-function on the critical strip 0<Re(z)<1, with the pole and the first two zeros visible. The zeros have real part 1/2, as they should.

Show[ComplexGraph[Zeta,0,1,-1, 23,200],AspectRatio->5]

According to Voronin's Universality Theorem, the ζ-function on the strip 1/2<Re(z)<1 approximates every holomorphic function without zeros to arbitrary precision. In other words: the strip shows all possible "analytic" color patterns that don't use black or white. Here's a representative segment of the strip.

Show[ComplexGraph[Zeta,1/2,1,103,109,200],AspectRatio->5]

Created by December 2007 by Axel Boldt, based on an idea by Jan Homann. All scripts and pictures on this page are in the public domain.