ComplexContourPlot
ComplexContourPlot[f,{z,z_{min},z_{max}}]
generates a filled contour plot of f as a function of z.
ComplexContourPlot[{f_{1},f_{2},…},{z,z_{min},z_{max}}]
generates contour lines for f_{1}, f_{2}, ….
ComplexContourPlot[f==g,{z,z_{min},z_{max}}]
plots contour lines for which f=g.
ComplexContourPlot[{f_{1}==g_{1},f_{2}==g_{2},…},{z,z_{min},z_{max}}]
plots contour lines for each of f_{1}g_{1}, f_{2}=g_{2}, ….
Details and Options
 At positions where f does not evaluate to a real number, holes are left so that the background to the contour plot shows through. The functions f and g will typically involve functions like Re, Im, Abs and Arg that extract real components from complex numbers for comparison purposes.
 ComplexContourPlot[f,{z,n}] is equivalent to ComplexContourPlot[f,{z,nn I,n+n I}].
 ComplexContourPlot treats the variable z as local, effectively using Block.
 ComplexContourPlot has attribute HoldAll and evaluates the f_{i} and g_{i} only after assigning specific numerical values to z. In some cases, it may be more efficient to use Evaluate to evaluate f and g symbolically first.
 ComplexContourPlot has the same options as Graphics, with the following additions and changes: [List of all options]

AspectRatio 1 ratio of height to width BoundaryStyle None how to draw RegionFunction boundaries BoxRatios Automatic effective 3D boundingbox ratios ClippingStyle None how to draw values clipped by PlotRange ColorFunction Automatic how to color regions between contour lines ColorFunctionScaling True whether to scale the argument to ColorFunction ContourLabels Automatic how to label contour levels Contours Automatic how many or what contours to use ContourShading Automatic how to shade regions between contours ContourStyle Automatic the style for contour lines EvaluationMonitor None expression to evaluate at every function evaluation Exclusions Automatic x,y curves to exclude ExclusionsStyle None what to draw at excluded curves Frame True whether to put a frame around the plot FrameTicks Automatic frame tick marks LightingAngle None effective angle of the simulated light source MaxRecursion Automatic the maximum number of recursive subdivisions allowed Mesh None how many mesh lines in each direction to draw MeshFunctions {} how to determine the placement of mesh lines MeshStyle Automatic the style for mesh lines Method Automatic the method to use for refining contours PerformanceGoal $PerformanceGoal aspects of performance to try to optimize PlotLegends None legends for contour regions PlotPoints Automatic the initial number of sample points in each direction PlotRange {Full,Full,Automatic} the range of f or other values to include PlotRangeClipping True whether to clip at the plot range PlotRangePadding Automatic how much to pad the range of values PlotTheme $PlotTheme overall theme for the plot RegionFunction (True&) how to determine whether a point should be included ScalingFunctions None how to scale individual coordinates WorkingPrecision MachinePrecision the precision used in internal computations  Typical settings for PlotLegends include:

None no legend Automatic automatically determine legend Placed[lspec,…] specify placement for legend  With the default setting ContourShading>Automatic, shading is used for ComplexContourPlot[f,…] but not for ComplexContourPlot[f=g,…] or ComplexContourPlot[{f_{1},f_{2},…},…].
 ComplexContourPlot[{f_{1}==g_{1},f_{2}==g_{2},…},…] superimposes the contour lines associated with all of the equalities f_{i}==g_{i}.
 In determining how to color regions between contour levels, ComplexContourPlot looks first at any explicit setting given for ContourShading, then at the setting for ColorFunction.
 When plotting contours of multiple functions ComplexContourPlot[{f_{1},f_{2},…},…], a list of contour specifications Contours{spec_{1},spec_{2},…} will use the corresponding spec_{i} for each of the f_{i}.
 ComplexContourPlot initially evaluates f at a grid of equally spaced sample points specified by PlotPoints. Then it uses an adaptive algorithm to subdivide at most MaxRecursion times to generate smooth contours.
 You should realize that since it uses only a finite number of sample points, it is possible for ComplexContourPlot to miss features of your functions. To check your results, you should try increasing the settings for PlotPoints and MaxRecursion.
 With some settings for PerformanceGoal, other specific option settings may be overridden.
 The arguments supplied to functions in MeshFunctions and RegionFunction are z, f.
 ColorFunction is supplied with a single argument, given by default by the average of the scaled values of f for each pair of successive contour levels.
 With the default settings Exclusions>Automatic and ExclusionsStyle>None, ComplexContourPlot breaks continuity in its sampling at any discontinuity curve it detects. The discontinuity is immediately visible only if it jumps out of a particular contour level.
 Possible settings for ScalingFunctions include:

s_{f} scale the f values {s_{Re},s_{Im}} scale the real and imaginary axes {s_{Re},s_{Im},s_{f}} scale the real and imaginary axes and f values 
AlignmentPoint Center the default point in the graphic to align with AspectRatio 1 ratio of height to width Axes False whether to draw axes AxesLabel None axes labels AxesOrigin Automatic where axes should cross AxesStyle {} style specifications for the axes Background None background color for the plot BaselinePosition Automatic how to align with a surrounding text baseline BaseStyle {} base style specifications for the graphic BoundaryStyle None how to draw RegionFunction boundaries BoxRatios Automatic effective 3D boundingbox ratios ClippingStyle None how to draw values clipped by PlotRange ColorFunction Automatic how to color regions between contour lines ColorFunctionScaling True whether to scale the argument to ColorFunction ContentSelectable Automatic whether to allow contents to be selected ContourLabels Automatic how to label contour levels Contours Automatic how many or what contours to use ContourShading Automatic how to shade regions between contours ContourStyle Automatic the style for contour lines CoordinatesToolOptions Automatic detailed behavior of the coordinates tool Epilog {} primitives rendered after the main plot EvaluationMonitor None expression to evaluate at every function evaluation Exclusions Automatic x,y curves to exclude ExclusionsStyle None what to draw at excluded curves FormatType TraditionalForm the default format type for text Frame True whether to put a frame around the plot FrameLabel None frame labels FrameStyle {} style specifications for the frame FrameTicks Automatic frame tick marks FrameTicksStyle {} style specifications for frame ticks GridLines None grid lines to draw GridLinesStyle {} style specifications for grid lines ImageMargins 0. the margins to leave around the graphic ImagePadding All what extra padding to allow for labels etc. ImageSize Automatic the absolute size at which to render the graphic LabelStyle {} style specifications for labels LightingAngle None effective angle of the simulated light source MaxRecursion Automatic the maximum number of recursive subdivisions allowed Mesh None how many mesh lines in each direction to draw MeshFunctions {} how to determine the placement of mesh lines MeshStyle Automatic the style for mesh lines Method Automatic the method to use for refining contours PerformanceGoal $PerformanceGoal aspects of performance to try to optimize PlotLabel None an overall label for the plot PlotLegends None legends for contour regions PlotPoints Automatic the initial number of sample points in each direction PlotRange {Full,Full,Automatic} the range of f or other values to include PlotRangeClipping True whether to clip at the plot range PlotRangePadding Automatic how much to pad the range of values PlotRegion Automatic the final display region to be filled PlotTheme $PlotTheme overall theme for the plot PreserveImageOptions Automatic whether to preserve image options when displaying new versions of the same graphic Prolog {} primitives rendered before the main plot RegionFunction (True&) how to determine whether a point should be included RotateLabel True whether to rotate y labels on the frame ScalingFunctions None how to scale individual coordinates Ticks Automatic axes ticks TicksStyle {} style specifications for axes ticks WorkingPrecision MachinePrecision the precision used in internal computations
List of all options
Examples
open allclose allBasic Examples (4)
Scope (18)
Sampling (6)
More points are sampled where the function changes quickly:
The white regions indicate where the function has been clipped. The plot range is selected automatically:
Use PlotRange to focus in on areas of interest:
Use PlotPoints and MaxRecursion to control adaptive sampling:
Use RegionFunction to restrict the surface to a region given by inequalities:
Use Exclusions to control whether and where to cut for discontinuities:
Labeling and Legending (6)
Options (138)
AspectRatio (4)
By default, AspectRatio uses the same width and height:
Use numerical value to specify the height to width ratio:
AspectRatioAutomatic determines the ratio from the plot ranges:
AspectRatioFull adjusts the height and width to tightly fit inside other constructs:
Axes (4)
By default, ComplexContourPlot uses a frame instead of axes:
Use AxesOrigin to specify where the axes intersect:
AxesOrigin (2)
AxesStyle (4)
BoundaryStyle (3)
Use a red boundary around the edges of the surface:
BoundaryStyle applies to holes cut by RegionFunction, but it does not apply to cuts made by Exclusions:
Use ExclusionsStyle instead:
ClippingStyle (4)
ColorFunction (3)
ColorFunctionScaling (1)
The ColorFunction can use scaled or unscaled coordinates:
Contours (9)
Use 10 equally spaced contours:
Use automatic contour selection:
Use at most 5 automatically selected contours:
Use specific contours with specific styles:
Use a function to generate a set of contours:
Have contours at the 40% and 80% percentile values:
The number of contours can be controlled separately if multiple functions are specified:
ContourShading (5)
The automatic shading is darker at low values and lighter at high values:
Use None to only show the contour lines:
Shading is automatically suppressed if a list of functions is specified:
ContourStyle (7)
The default contour style is a partially transparent line:
Use dashed, black contour lines:
Use None to suppress contour lines:
ContourStyleNone is equivalent to ContourLinesFalse:
Alternate between red and dashed contour lines:
Use different styles for different functions:
EvaluationMonitor (2)
Exclusions (6)
Frame (4)
ComplexContourPlot uses a frame by default:
Use FrameFalse to turn off the frame:
FrameLabel (4)
FrameTicks (9)
Frame ticks are placed automatically by default:
Use frame ticks on the bottom edge:
By default, the top and right edges have tick marks but no tick labels:
Use All to include tick labels on all edges:
Place tick marks at the specified positions:
Draw frame tick marks at the specified positions with specific labels:
Specify the lengths for tick marks as a fraction of the graphics size:
Use different sizes in the positive and negative directions for each tick mark:
Specify a style for each frame tick:
Construct a function that places frame ticks at the midpoint and extremes of the frame edge:
FrameTicksStyle (3)
ImageSize (7)
Use named sizes such as Tiny, Small, Medium and Large:
Specify the width of the plot:
Specify the height of the plot:
Allow the width and height to be up to a certain size:
Specify the width and height for a graphic, padding with space if necessary:
Setting AspectRatioFull will fill the available space:
Use maximum sizes for the width and height:
Use ImageSizeFull to fill the available space in an object:
Specify the image size as a fraction of the available space:
MeshFunctions (2)
MeshStyle (2)
PerformanceGoal (2)
PlotLegends (12)
Show a legend for the contour regions:
Legends depend on the contours:
Show a label for each contour:
Show a continuous color scale:
PlotLegends automatically matches the color function:
PlotLegendsAutomatic labels contours with placeholder values:
PlotLegends"Expressions" labels contours with the corresponding functions:
PlotLegendsAutomatic labels implicit curves with placeholder values:
PlotLegends"Expressions" uses the actual equations:
Specify a list of labels for the legend:
Use Placed to change the legend position:
Use BarLegend to change the legend appearance:
PlotRange (3)
ScalingFunctions (5)
Ticks (9)
Ticks are placed automatically on each axis:
Use TicksNone to draw axes without any tick marks:
Use ticks on the axis, but not the axis:
Place tick marks at the specified positions:
Draw tick marks at the specified positions with specified labels:
Use specific ticks on one axis and automatic ticks on the other:
Specify the lengths for ticks as a fraction of graphics size:
Use different sizes in the positive and negative directions for each tick:
Specify a style for each tick:
Construct a function that places ticks at the midpoint and extremes of the axis:
Applications (23)
Basic Applications (7)
For a given complex function, plot curves of the constant real part:
Show curves of the constant real and constant imaginary parts:
Show curves of the constant modulus and constant argument:
Curves of constant Abs[z] are concentric circles:
Setting Abs[z]==1 gives a specific circle:
Curves of constant Arg[z] are (half) lines that begin at the origin:
Setting Arg[z]== produces a specific (half) line:
Conformal Maps (6)
The real and imaginary parts of are lines with slope 1 and , respectively:
Compare lines of constant real and constant imaginary parts in the and planes:
The reciprocal function maps circles centered at the origin to circles centered at the origin and lines through the origin to lines through the origin, but Abs[w] grows larger near :
Linear fractional transformations map circles and lines to circles and lines:
Visualize more complicated mappings:
For a conformal map , curves that are orthogonal at their intersections in the plane are also orthogonal at the corresponding intersections in the plane:
Compute the real and imaginary parts of :
Verify that the gradients of the real and imaginary parts of are orthogonal by verifying that their dot product is zero:
Visually verify that the contours are orthogonal at points of intersection:
Nonconformal maps do not preserve angles:
Compute the real and imaginary parts of :
Verify that the gradients of the real and imaginary parts of are not orthogonal by verifying that their dot product is not zero:
Visually verify that the contours are not orthogonal at points of intersection:
Use InverseFunction to display conformal maps:
Function Growth (1)
The real and imaginary parts of grow exponentially in the direction:
Observe rapid growth in both plots where the contours are closer together:
The modulus of also grows exponentially in the vertical direction, but the argument does not:
Note that the contours are closer together on the left for large Abs[y], but not on the right:
Increasing the number of contours emphasizes the regions where Abs[Sin[z]] grows more rapidly:
Filter and Transfer Functions (4)
The differential equation for a certain harmonic oscillator with viscous damping is y''+γ y'+y=f(t), where γ is the damping coefficient and f(t) is an applied force. The transfer function is the reciprocal of the Laplace transform of y:
Define a transfer function for an underdamped (γ=0.2) harmonic oscillator:
Use a Bode plot to see the gain (Abs) and phase (Arg in degrees) along the imaginary axis:
Use ComplexContourPlot to plot the transfer function over a subset of the plane and note the rapid change of both sets of contours near :
A secondorder Butterworth filter model with cutoff frequency at :
Plot the magnitude of the filter and observe that the poles of the filter lie on the unit circle at equally spaced angles of :
The contour that coincides with the imaginary axis shows that is an allpass filter that does not change the magnitude of the signal for any frequency, but it does change the phase:
An algebraic analysis confirms that the gain is 1 for all values of :
Show a rootlocus diagram with a plot of the magnitude of the transfer function:
Physics Applications (3)
Define a complex function that is analytic for all nonzero in the complex plane:
Verify that the real and imaginary parts of are harmonic:
The functions and are the velocity potential and stream function for an ideal fluid flow. Plot the equipotential curves and the streamlines for ideal fluid flow over a cylinder:
Graph the streamlines for a complex potential for ideal fluid flow for flow in a channel through a slit at the origin:
Recreate a famous image (Fig. XII) from A Treatise on Electricity and Magnetism by James Clerk, 1873. Maxwell showing equipotential surfaces for two semiinfinite planes that form a capacitor:
This requires different branches of the inverse of :
Plot the middle part, taking care to match the contours in the upper part:
Properties & Relations (9)
ComplexContourPlot is a special case of ContourPlot:
ComplexContourPlot automatically suppresses shading for two or more functions:
ComplexRegionPlot plots regions over the complexes:
ComplexPlot shows the argument and magnitude of a function using color:
Use ComplexPlot3D to use the axis for the magnitude:
Use ComplexArrayPlot for arrays of complex numbers:
Use ReImPlot and AbsArgPlot to plot complex values over the real numbers:
Use ComplexListPlot to show the location of complex numbers in the plane:
ComplexStreamPlot and ComplexVectorPlot treat complex numbers as directions:
Possible Issues (1)
Since Arg[f] cannot exceed , ComplexContourPlot will usually not render branch cuts:
Text
Wolfram Research (2020), ComplexContourPlot, Wolfram Language function, https://reference.wolfram.com/language/ref/ComplexContourPlot.html.
CMS
Wolfram Language. 2020. "ComplexContourPlot." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/ComplexContourPlot.html.
APA
Wolfram Language. (2020). ComplexContourPlot. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ComplexContourPlot.html