Plot complex-valued functions
Plot complex-valued functions with style.
cplot helps plotting complex-valued functions in a visually appealing manner.
pip install cplot
and use as
import numpy as np import cplot def f(z): return np.sin(z**3) / z plt = cplot.plot( f, (-2.0, +2.0, 400), (-2.0, +2.0, 400), # abs_scaling=lambda x: x / (x + 1), # how to scale the lightness in domain coloring # contours_abs=2.0, # contours_arg=(-np.pi / 2, 0, np.pi / 2, np.pi), # emphasize_abs_contour_1: bool = True, # add_colorbars: bool = True, # add_axes_labels: bool = True, # saturation_adjustment: float = 1.28, # min_contour_length = None, # linewidth = None, ) plt.show()
Historically, plotting of complex functions was in one of three ways
|Only show the absolute value; sometimes as a 3D plot||Only show the phase/the argument in a color wheel (phase portrait)||Show contour lines for both arg and abs|
Combining all three of them gives you a cplot:
See also Wikipedia: Domain coloring.
Features of this software:
- cplot uses OKLAB, a perceptually uniform color space for the argument colors. This avoids streaks of colors occurring with other color spaces, e.g., HSL.
- The contour
abs(z) == 1is emphasized, other abs contours are at 2, 4, 8, etc. and 1/2, 1/4, 1/8, etc., respectively. This makes it easy to tell the absolte value precisely.
arg(z) == 0, the color is green, for
arg(z) == pi/2it's blue, for
arg(z) = -pi / 2it's orange, and for
arg(z) = piit's pink.
Other useful functions:
# There is a tripcolor function as well for triangulated 2D domains cplot.tripcolor(triang, z) # The function get_srgb1 returns the SRGB1 triple for every complex input value. # (Accepts arrays, too.) z = 2 + 5j val = cplot.get_srgb1(z)
cplot can also plot functions on the Riemann sphere, a mapping of the complex plane to the unit ball.
import cplot import numpy as np cplot.riemann_sphere(np.log)
To run the cplot unit tests, check out this repository and run
Similar projects and further reading
- Tristan Needham, Visual Complex Analysis, 1997
- François Labelle, A Gallery of Complex Functions, 2002
- Douglas Arnold and Jonathan Rogness, Möbius transformations revealed, 2008
- Konstantin Poelke and Konrad Polthier, Lifted Domain Coloring, 2009
- Elias Wegert and Gunter Semmler, Phase Plots of Complex Functions: a Journey in Illustration, 2011
- Elias Wegert, Calendars Complex Beauties, 2011-
- Elias Wegert, Visual Complex Functions, 2012
- empet, Visualizing complex-valued functions with Matplotlib and Mayavi, Domain coloring method, 2014
- John D. Cook, Visualizing complex functions, 2017
- endolith, complex-colormap, 2017
- Anthony Hernandez, dcolor, 2017
- Juan Carlos Ponce Campuzano, DC gallery, 2018
- 3Blue1Brown, Winding numbers and domain coloring, 2018
- Ricky Reusser, Domain Coloring with Adaptive Contouring, 2019
- Ricky Reusser, Locally Scaled Domain Coloring, Part 1: Contour Plots, 2020
- David Lowry-Duda, Visualizing modular forms, 2020
This software is published under the GPL-3.0 license. In cases where the constraints of the GPL prevent you from using this software, feel free contact the author.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.