SkillAgentSearch skills...

ComplexPhasePortrait.jl

Complex phase portraits for Julia.

Install / Use

/learn @JuliaHolomorphic/ComplexPhasePortrait.jl
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

ComplexPhasePortrait.jl

Build Status Coverage

This package is a Julia implementation of the phase portrait ideas presented in Elias Wegert's book "Visual Complex Functions".

Installation

From the Julia command prompt:

] add ComplexPhasePortrait

Examples

There is so far one exported function, portrait, and here I will try to detail its use. First we need function data over a grid.

using ComplexPhasePortrait

nx = 1000
x = range(-1, stop=1, length=nx)
Z = x' .+ reverse(x)*im

f = z -> (z - 0.5im)^2 * (z + 0.5+0.5im)/z
fz = f.(Z)

Now a basic phase plot.

img = portrait(fz)

proper phase plot

Now for a basic plot using NIST coloring.

img = portrait(fz, ctype="nist")

nist coloring

Lines of constant phase are given by

img = portrait(fz, PTstepphase)

constant phase

Lines of constant modulus are given by

img = portrait(fz, PTstepmod)

constant modulus

Finally, a conformal grid is given by

img = portrait(fz, PTcgrid)

conformal grid

You can also use custom colormaps to create unique visualizations. Below are examples using the viridis colormap and a custom colormap.

using ComplexPhasePortrait, ColorSchemes

viridis_colormap = [RGB(c.r, c.g, c.b) for c in ColorSchemes.viridis.colors]

img = portrait(fz, PTcgrid, colormap=viridis_colormap)

viridis colormap

using ComplexPhasePortrait, Colors
custom_colormap = [RGB(1.0, 0.0, 0.0), RGB(0.0, 1.0, 0.0), RGB(0.0, 0.0, 1.0)]
img = portrait(fz, PTcgrid, colormap=custom_colormap)

custom colormap

Plot recipes

ComplexPhasePortrait.jl has support for plotting recipes for Plots.jl and Makie.jl.

Plots.jl:

using Plots
using LaTeXStrings

using ComplexPhasePortrait
using IntervalSets

f = z -> (z - 0.5im)^2 * (z + 0.5+0.5im)/z

phaseplot(-1..1, -1..1, f, PTcgrid, :ctype=>"nist";
          xlabel=L"\Re\{z\}", ylabel=L"\Im\{z\}")

Plots.jl example

Makie.jl

Makie.jl is an optional dependency via package extensions, and the functionality to plot phase portraits becomes available if Makie.jl or one of its front-end packages is loaded before ComplexPhasePortrait.jl:

using GLMakie

using ComplexPhasePortrait
using IntervalSets

f = z -> (z - 0.5im)^2 * (z + 0.5+0.5im)/z

fig = Figure()
ax = Axis(fig[1, 1], aspect=1)
phase!(ax, -1..1, -1..1, f, portrait_type=PTcgrid, ctyle="nist")
display(fig)

Makie.jl example

Alternatively, one can use the function phase:

phase(x, y, f; kwargs...)

x and y can be vectors or ClosedIntervals; in the former case f can be a matrix of appropriate size or a Function, in the latter case, only a Function is possible.

Saving Images

To save the generated phase portraits as image file directly without use of Plots.jl or Makie.jl, you can use the save function from the Images.jl package. For example:

using Images
f = z -> (z - 0.5im)^2 * (z + 0.5+0.5im)/z
fz = f.(Z)
img = portrait(fz)
save("phase_portrait.png", img)

Related Skills

View on GitHub
GitHub Stars26
CategoryDevelopment
Updated10h ago
Forks10

Languages

Julia

Security Score

75/100

Audited on Mar 30, 2026

No findings