{"id":13689116,"url":"https://github.com/nschloe/cplot","last_synced_at":"2025-04-07T07:17:55.116Z","repository":{"id":28567143,"uuid":"118746286","full_name":"nschloe/cplot","owner":"nschloe","description":":rainbow: Plot complex functions","archived":false,"fork":false,"pushed_at":"2023-11-25T19:14:09.000Z","size":78732,"stargazers_count":159,"open_issues_count":7,"forks_count":21,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-31T06:07:53.923Z","etag":null,"topics":["mathematics","matplotlib","plotting","python","science"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nschloe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-01-24T09:55:51.000Z","updated_at":"2025-03-13T21:09:07.000Z","dependencies_parsed_at":"2024-01-17T06:11:53.492Z","dependency_job_id":"ba09bd28-a8eb-495f-83dd-935538fb76d8","html_url":"https://github.com/nschloe/cplot","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nschloe%2Fcplot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nschloe%2Fcplot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nschloe%2Fcplot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nschloe%2Fcplot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nschloe","download_url":"https://codeload.github.com/nschloe/cplot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247608160,"owners_count":20965953,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mathematics","matplotlib","plotting","python","science"],"created_at":"2024-08-02T15:01:34.186Z","updated_at":"2025-04-07T07:17:55.097Z","avatar_url":"https://github.com/nschloe.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/nschloe/cplot\"\u003e\u003cimg alt=\"cplot\" src=\"https://nschloe.github.io/cplot/cplot-logo.svg\" width=\"50%\"\u003e\u003c/a\u003e\n  \u003cp align=\"center\"\u003ePlot complex-valued functions with style.\u003c/p\u003e\n\u003c/p\u003e\n\n[![PyPi Version](https://img.shields.io/pypi/v/cplot.svg?style=flat-square)](https://pypi.org/project/cplot)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/cplot.svg?style=flat-square)](https://pypi.org/pypi/cplot/)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5599493.svg?style=flat-square)](https://doi.org/10.5281/zenodo.5599493)\n[![GitHub stars](https://img.shields.io/github/stars/nschloe/cplot.svg?style=flat-square\u0026logo=github\u0026label=Stars\u0026logoColor=white)](https://github.com/nschloe/cplot)\n[![Downloads](https://pepy.tech/badge/cplot/month)](https://pepy.tech/project/cplot)\n\n[![Discord](https://img.shields.io/static/v1?logo=discord\u0026logoColor=white\u0026label=chat\u0026message=on%20discord\u0026color=7289da\u0026style=flat-square)](https://discord.gg/hnTJ5MRX2Y)\n\n[![gh-actions](https://img.shields.io/github/workflow/status/nschloe/cplot/ci?style=flat-square)](https://github.com/nschloe/cplot/actions?query=workflow%3Aci)\n[![codecov](https://img.shields.io/codecov/c/github/nschloe/cplot.svg?style=flat-square)](https://codecov.io/gh/nschloe/cplot)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/psf/black)\n\ncplot helps plotting complex-valued functions in a visually appealing manner.\n\nInstall with\n\n```\npip install cplot\n```\n\nand use as\n\n```python\nimport numpy as np\n\nimport cplot\n\n\ndef f(z):\n    return np.sin(z**3) / z\n\n\nplt = cplot.plot(\n    f,\n    (-2.0, +2.0, 400),\n    (-2.0, +2.0, 400),\n    # abs_scaling=lambda x: x / (x + 1),  # how to scale the lightness in domain coloring\n    # contours_abs=2.0,\n    # contours_arg=(-np.pi / 2, 0, np.pi / 2, np.pi),\n    # emphasize_abs_contour_1: bool = True,\n    # add_colorbars: bool = True,\n    # add_axes_labels: bool = True,\n    # saturation_adjustment: float = 1.28,\n    # min_contour_length = None,\n    # linewidth = None,\n)\nplt.show()\n```\n\nHistorically, plotting of complex functions was in one of three ways\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/sinz3z-abs.svg\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/sinz3z-arg.svg\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/sinz3z-contours.svg\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------------: | :--------------------------------------------------------------------: | :-------------------------------------------------------------------------: |\n|          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                   |\n\nCombining all three of them gives you a _cplot_:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://nschloe.github.io/cplot/sinz3z.svg\" width=\"60%\"\u003e\n\u003c/p\u003e\n\nSee also [Wikipedia: Domain coloring](https://en.wikipedia.org/wiki/Domain_coloring).\n\nFeatures of this software:\n\n- cplot uses [OKLAB](https://bottosson.github.io/posts/oklab/), a perceptually\n  uniform color space for the argument colors.\n  This avoids streaks of colors occurring with other color spaces, e.g., HSL.\n- The contour `abs(z) == 1` is emphasized, other abs contours are at 2, 4, 8, etc. and\n  1/2, 1/4, 1/8, etc., respectively. This makes it easy to tell the absolte value\n  precisely.\n- For `arg(z) == 0`, the color is green, for `arg(z) == pi/2` it's blue, for `arg(z) = -pi / 2` it's orange, and for `arg(z) = pi` it's pink.\n\nOther useful functions:\n\n\u003c!--pytest.mark.skip--\u003e\n\n```python\n# There is a tripcolor function as well for triangulated 2D domains\ncplot.tripcolor(triang, z)\n\n# The function get_srgb1 returns the SRGB1 triple for every complex input value.\n# (Accepts arrays, too.)\nz = 2 + 5j\nval = cplot.get_srgb1(z)\n```\n\n#### Riemann sphere\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://nschloe.github.io/cplot/riemann-log.png\" width=\"60%\"\u003e\n\u003c/p\u003e\n\ncplot can also plot functions on the [Riemann\nsphere](https://en.wikipedia.org/wiki/Riemann_sphere), a mapping of the complex\nplane to the unit ball.\n\n\u003c!--pytest-codeblocks:importorskip(pyvista)--\u003e\n\n```python\nimport cplot\nimport numpy as np\n\ncplot.riemann_sphere(np.log)\n```\n\n#### Gallery\n\nAll plots are created with default settings.\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/z1.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/z2.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/z3.png\" width=\"70%\"\u003e |\n| :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: |\n|                            `z ** 1`                            |                            `z ** 2`                            |                            `z ** 3`                            |\n\n\u003cdetails\u003e\n\u003csummary\u003eMany more plots\u003c/summary\u003e\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/1z.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/1z2.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/1z3.png\" width=\"70%\"\u003e |\n| :------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: |\n|                            `1 / z`                             |                          `1 / z ** 2`                           |                          `1 / z ** 3`                           |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/moebius1.png\" width=\"70%\"\u003e |           \u003cimg src=\"https://nschloe.github.io/cplot/moebius2.png\" width=\"70%\"\u003e            | \u003cimg src=\"https://nschloe.github.io/cplot/moebius3.png\" width=\"70%\"\u003e |\n| :------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: | :------------------------------------------------------------------: |\n|                         `(z + 1) / (z - 1)`                          | Another [Möbius transformation](https://en.wikipedia.org/wiki/M%C3%B6bius_transformation) |                    A third Möbius transformation                     |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/re.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/z-absz.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/conj.png\" width=\"70%\"\u003e |\n| :------------------------------------------------------------: | :----------------------------------------------------------------: | :--------------------------------------------------------------: |\n|                           `np.real`                            |                            `z / abs(z)`                            |                            `np.conj`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/z6+1.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/z6-1.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/z-6+1.png\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------: | :--------------------------------------------------------------: | :---------------------------------------------------------------: |\n|                           `z ** 6 + 1`                           |   [`z ** 6 - 1`](https://en.wikipedia.org/wiki/Root_of_unity)    |                          `z ** (-6) + 1`                          |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/zz.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/1zz.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/z1z.png\" width=\"70%\"\u003e |\n| :------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: |\n|                            `z ** z`                            |                          `(1/z) ** z`                           |                          `z ** (1/z)`                           |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/root2.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/root3.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/root4.png\" width=\"70%\"\u003e |\n| :---------------------------------------------------------------: | :---------------------------------------------------------------: | :---------------------------------------------------------------: |\n|                             `np.sqrt`                             |                            `z**(1/3)`                             |                            `z**(1/4)`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/log.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/exp.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/exp2.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------: | :-------------------------------------------------------------: | :--------------------------------------------------------------: |\n|       [`np.log`](https://en.wikipedia.org/wiki/Logarithm)       |                            `np.exp`                             |                            `np.exp2`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/exp1z.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/zsin1z.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/cos1z.png\" width=\"70%\"\u003e |\n| :---------------------------------------------------------------: | :----------------------------------------------------------------: | :---------------------------------------------------------------: |\n|                          `np.exp(1 / z)`                          |                        `z * np.sin(1 / z)`                         |                          `np.cos(1 / z)`                          |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/exp-z2.png\" width=\"70%\"\u003e |     \u003cimg src=\"https://nschloe.github.io/cplot/11z2.png\" width=\"70%\"\u003e     | \u003cimg src=\"https://nschloe.github.io/cplot/erf.png\" width=\"70%\"\u003e |\n| :----------------------------------------------------------------: | :----------------------------------------------------------------------: | :-------------------------------------------------------------: |\n|                          `exp(- z ** 2)`                           | [`1 / (1 + z ** 2)`](https://en.wikipedia.org/wiki/Runge%27s_phenomenon) | [Error function](https://en.wikipedia.org/wiki/Error_function)  |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/sin.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/cos.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/tan.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: |\n|                            `np.sin`                             |                            `np.cos`                             |                            `np.tan`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/sec.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/csc.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/cot.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: |\n|                              `sec`                              |                              `csc`                              |                              `cot`                              |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/sinh.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/cosh.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/tanh.png\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------: | :--------------------------------------------------------------: | :--------------------------------------------------------------: |\n| [`np.sinh`](https://en.wikipedia.org/wiki/Hyperbolic_functions)  |                            `np.cosh`                             |                            `np.tanh`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/sech.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/csch.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/coth.png\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------: | :--------------------------------------------------------------: | :--------------------------------------------------------------: |\n|                       secans hyperbolicus                        |                      cosecans hyperbolicus                       |                      cotangent hyperbolicus                      |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/arcsin.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/arccos.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/arctan.png\" width=\"70%\"\u003e |\n| :----------------------------------------------------------------: | :----------------------------------------------------------------: | :----------------------------------------------------------------: |\n|                            `np.arcsin`                             |                            `np.arccos`                             |                            `np.arctan`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/arcsinh.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/arccosh.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/arctanh.png\" width=\"70%\"\u003e |\n| :-----------------------------------------------------------------: | :-----------------------------------------------------------------: | :-----------------------------------------------------------------: |\n|                            `np.arcsinh`                             |                            `np.arccosh`                             |                            `np.arctanh`                             |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/sinz-z.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/cosz-z.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/tanz-z.png\" width=\"70%\"\u003e |\n| :----------------------------------------------------------------: | :----------------------------------------------------------------: | :----------------------------------------------------------------: |\n| [Sinc, `sin(z) / z`](https://en.wikipedia.org/wiki/Sinc_function)  |                            `cos(z) / z`                            |                            `tan(z) / z`                            |\n\n|       \u003cimg src=\"https://nschloe.github.io/cplot/si.png\" width=\"70%\"\u003e       | \u003cimg src=\"https://nschloe.github.io/cplot/ci.png\" width=\"70%\"\u003e |  \u003cimg src=\"https://nschloe.github.io/cplot/lambertw.png\" width=\"70%\"\u003e  |\n| :------------------------------------------------------------------------: | :------------------------------------------------------------: | :--------------------------------------------------------------------: |\n| [Integral sine _Si_](https://en.wikipedia.org/wiki/Trigonometric_integral) |                      Integral cosine _Ci_                      | [Lambert W function](https://en.wikipedia.org/wiki/Lambert_W_function) |\n\n|   \u003cimg src=\"https://nschloe.github.io/cplot/gudermannian.png\" width=\"70%\"\u003e   | \u003cimg src=\"https://nschloe.github.io/cplot/exp1.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/expi.png\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------------------: | :--------------------------------------------------------------: | :--------------------------------------------------------------: |\n| [Gudermannian function](https://en.wikipedia.org/wiki/Gudermannian_function) |                     Exponential integral E1                      |                     Exponential integral Ei                      |\n\n|   \u003cimg src=\"https://nschloe.github.io/cplot/zeta.png\" width=\"70%\"\u003e   | \u003cimg src=\"https://nschloe.github.io/cplot/bernoulli.png\" width=\"70%\"\u003e |   \u003cimg src=\"https://nschloe.github.io/cplot/dirichlet-eta.png\" width=\"70%\"\u003e    |\n| :------------------------------------------------------------------: | :-------------------------------------------------------------------: | :----------------------------------------------------------------------------: |\n| [`mpmath.zeta`](https://en.wikipedia.org/wiki/Riemann_zeta_function) |                          Bernoulli function                           | [Dirichlet eta function](https://en.wikipedia.org/wiki/Dirichlet_eta_function) |\n\n|        \u003cimg src=\"https://nschloe.github.io/cplot/hurwitz-zeta-1-3.png\" width=\"70%\"\u003e         | \u003cimg src=\"https://nschloe.github.io/cplot/hurwitz-zeta-24-25.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/hurwitz-zeta-a-3-4i.png\" width=\"70%\"\u003e |\n| :-----------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :-----------------------------------------------------------------------------: |\n| [Hurwitz zeta function](https://en.wikipedia.org/wiki/Hurwitz_zeta_function) with `a = 1/3` |                     Hurwitz zeta function with `a = 24/25`                     |                     Hurwitz zeta function with `s = 3 + 4i`                     |\n\n|   \u003cimg src=\"https://nschloe.github.io/cplot/gamma.png\" width=\"70%\"\u003e   | \u003cimg src=\"https://nschloe.github.io/cplot/reciprocal-gamma.png\" width=\"70%\"\u003e |              \u003cimg src=\"https://nschloe.github.io/cplot/loggamma.png\" width=\"70%\"\u003e               |\n| :-------------------------------------------------------------------: | :--------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: |\n| [`scipy.special.gamma`](https://en.wikipedia.org/wiki/Gamma_function) | [reciprocal Gamma](https://en.wikipedia.org/wiki/Reciprocal_gamma_function)  | [`scipy.special.loggamma`](https://en.wikipedia.org/wiki/Gamma_function#The_log-gamma_function) |\n\n|    \u003cimg src=\"https://nschloe.github.io/cplot/digamma.png\" width=\"70%\"\u003e    | \u003cimg src=\"https://nschloe.github.io/cplot/polygamma1.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/polygamma2.png\" width=\"70%\"\u003e |\n| :-----------------------------------------------------------------------: | :--------------------------------------------------------------------: | :--------------------------------------------------------------------: |\n| [`scipy.special.digamma`](https://en.wikipedia.org/wiki/Digamma_function) |    [Polygamma 1](https://en.wikipedia.org/wiki/Polygamma_function)     |    [Polygamma 2](https://en.wikipedia.org/wiki/Polygamma_function)     |\n\n|           \u003cimg src=\"https://nschloe.github.io/cplot/riemann-siegel-theta.png\" width=\"70%\"\u003e           | \u003cimg src=\"https://nschloe.github.io/cplot/riemann-siegel-z.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/riemann-xi.png\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------: | :--------------------------------------------------------------------: |\n| [Riemann-Siegel theta function](https://en.wikipedia.org/wiki/Riemann%E2%80%93Siegel_theta_function) |            [Z-function](https://en.wikipedia.org/wiki/Z_function)            |    [Riemann-Xi](https://en.wikipedia.org/wiki/Riemann_Xi_function)     |\n\n|           \u003cimg src=\"https://nschloe.github.io/cplot/ellipj-sn-06.png\" width=\"70%\"\u003e            | \u003cimg src=\"https://nschloe.github.io/cplot/ellipj-cn-06.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/ellipj-dn-06.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------: | :----------------------------------------------------------------------: |\n| [Jacobi elliptic function](https://en.wikipedia.org/wiki/Jacobi_elliptic_functions) `sn(0.6)` |                                `cn(0.6)`                                 |                                `dn(0.6)`                                 |\n\n|               \u003cimg src=\"https://nschloe.github.io/cplot/jtheta1.png\" width=\"70%\"\u003e                | \u003cimg src=\"https://nschloe.github.io/cplot/jtheta2.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/jtheta3.png\" width=\"70%\"\u003e |\n| :----------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------: | :-----------------------------------------------------------------: |\n| [Jacobi theta](https://en.wikipedia.org/wiki/Theta_function) 1 with `q=0.1 * exp(0.1j * np.pi))` |                  Jacobi theta 2 with the same `q`                   |                  Jacobi theta 3 with the same `q`                   |\n\n|         \u003cimg src=\"https://nschloe.github.io/cplot/bessel1-1.png\" width=\"70%\"\u003e         | \u003cimg src=\"https://nschloe.github.io/cplot/bessel1-2.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/bessel1-3.png\" width=\"70%\"\u003e |\n| :-----------------------------------------------------------------------------------: | :-------------------------------------------------------------------: | :-------------------------------------------------------------------: |\n| [Bessel function](https://en.wikipedia.org/wiki/Bessel_function), first kind, order 1 |                 Bessel function, first kind, order 2                  |                 Bessel function, first kind, order 3                  |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/bessel2-1.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/bessel2-2.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/bessel2-3.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------------: | :-------------------------------------------------------------------: | :-------------------------------------------------------------------: |\n|                 Bessel function, second kind, order 1                 |                 Bessel function, second kind, order 2                 |                 Bessel function, second kind, order 3                 |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/hankel1a.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/hankel1b.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/hankel2.png\" width=\"70%\"\u003e |\n| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :-----------------------------------------------------------------: |\n|                Hankel function of first kind (n=1.0)                 |                Hankel function of first kind (n=3.1)                 |               Hankel function of second kind (n=1.0)                |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/fresnel-s.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/fresnel-c.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/faddeeva.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------------: | :-------------------------------------------------------------------: | :------------------------------------------------------------------: |\n|      [Fresnel S](https://en.wikipedia.org/wiki/Fresnel_integral)      |      [Fresnel C](https://en.wikipedia.org/wiki/Fresnel_integral)      | [Faddeeva function](https://en.wikipedia.org/wiki/Faddeeva_function) |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/airy-ai.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/airy-bi.png\" width=\"70%\"\u003e |  \u003cimg src=\"https://nschloe.github.io/cplot/airye-ai.png\" width=\"70%\"\u003e   |\n| :-----------------------------------------------------------------: | :-----------------------------------------------------------------: | :---------------------------------------------------------------------: |\n|   [Airy function Ai](https://en.wikipedia.org/wiki/Airy_function)   |          [Bi](https://en.wikipedia.org/wiki/Airy_function)          | [Exponentially scaled eAi](https://en.wikipedia.org/wiki/Airy_function) |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/tanh-sinh.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/sinh-sinh.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/exp-sinh.png\" width=\"70%\"\u003e |\n| :-------------------------------------------------------------------: | :-------------------------------------------------------------------: | :------------------------------------------------------------------: |\n|                       `tanh(pi / 2 * sinh(z))`                        |                       `sinh(pi / 2 * sinh(z))`                        |                       `exp(pi / 2 * sinh(z))`                        |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/kleinj.png\" width=\"70%\"\u003e |   \u003cimg src=\"https://nschloe.github.io/cplot/dedekind-eta.png\" width=\"70%\"\u003e   |\n| :----------------------------------------------------------------: | :--------------------------------------------------------------------------: |\n| [Klein's _j_-invariant](https://en.wikipedia.org/wiki/J-invariant) | [Dedekind eta function](https://en.wikipedia.org/wiki/Dedekind_eta_function) |\n\n| \u003cimg src=\"https://nschloe.github.io/cplot/lambert-1.png\" width=\"70%\"\u003e  | \u003cimg src=\"https://nschloe.github.io/cplot/lambert-von-mangoldt.png\" width=\"70%\"\u003e | \u003cimg src=\"https://nschloe.github.io/cplot/lambert-liouville.png\" width=\"70%\"\u003e |\n| :--------------------------------------------------------------------: | :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------: |\n| [Lambert series](https://en.wikipedia.org/wiki/Lambert_series) with 1s |                  Lambert series with von-Mangoldt-coefficients                   |                  Lambert series with Liouville-coefficients                   |\n\n\u003c/details\u003e\n\n### Testing\n\nTo run the cplot unit tests, check out this repository and run\n\n```\ntox\n```\n\n### Similar projects and further reading\n\n- [Tristan Needham, _Visual Complex\n  Analysis_, 1997](https://umv.science.upjs.sk/hutnik/NeedhamVCA.pdf)\n- [François Labelle, _A Gallery of Complex\n  Functions_, 2002](http://wismuth.com/complex/gallery.html)\n- [Douglas Arnold and Jonathan Rogness, _Möbius transformations\n  revealed_, 2008](https://youtu.be/0z1fIsUNhO4)\n- [Konstantin Poelke and Konrad Polthier, _Lifted Domain Coloring_,\n  2009](https://doi.org/10.1111/j.1467-8659.2009.01479.x)\n- [Elias Wegert and Gunter Semmler, _Phase Plots of Complex Functions:\n  a Journey in Illustration_, 2011](https://www.ams.org/notices/201106/rtx110600768p.pdf)\n- [Elias Wegert,\n  Calendars _Complex Beauties_, 2011-](https://tu-freiberg.de/en/fakult1/ana/institute/institute-of-applied-analysis/organisation/complex-beauties)\n- [Elias Wegert, _Visual Complex\n  Functions_, 2012](https://www.springer.com/gp/book/9783034801799)\n- [empet, _Visualizing complex-valued functions with Matplotlib and Mayavi, Domain coloring method_, 2014](https://nbviewer.org/github/empet/Math/blob/master/DomainColoring.ipynb)\n- [John D. Cook, _Visualizing complex\n  functions_, 2017](https://www.johndcook.com/blog/2017/11/09/visualizing-complex-functions/)\n- [endolith, _complex-colormap_, 2017](https://github.com/endolith/complex_colormap)\n- [Anthony Hernandez, _dcolor_, 2017](https://github.com/hernanat/dcolor)\n- [Juan Carlos Ponce Campuzano, _DC\n  gallery_, 2018](https://www.dynamicmath.xyz/domain-coloring/dcgallery.html)\n- [3Blue1Brown, _Winding numbers and domain coloring_, 2018](https://youtu.be/b7FxPsqfkOY)\n- [Ricky Reusser, _Domain Coloring with Adaptive\n  Contouring_, 2019](https://observablehq.com/@rreusser/adaptive-domain-coloring)\n- [Ricky Reusser, _Locally Scaled Domain Coloring, Part 1: Contour\n  Plots_, 2020](https://observablehq.com/@rreusser/locally-scaled-domain-coloring-part-1-contour-plots)\n- [David Lowry-Duda, _Visualizing modular forms_, 2020](https://arxiv.org/abs/2002.05234)\n\n### License\n\nThis software is published under the [GPL-3.0 license](LICENSE). In cases where the\nconstraints of the GPL prevent you from using this software, feel free contact the\nauthor.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnschloe%2Fcplot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnschloe%2Fcplot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnschloe%2Fcplot/lists"}