Anatomy of the Mandelbrot set
The Mandelbrot set defined as a subset of the complex plane, the calculation that decides membership, and the shapes and dimension of its boundary.
13 minutes read
2726 words
Contents13
The pictures that carry the name Mandelbrot show a black bulb with spirals and curls along its edge. They are coloured in bands, and magnifying the edge reveals more detail without end. Those pictures are portraits of a set of complex numbers. One short calculation, repeated, decides which numbers belong. This page defines the set, works that calculation, and names the shapes the picture turns out to hold.

Assumed knowledge
Complex numbers, and the notation for writing a set and its members. Both are built up in numbers and sets .
Polar form, which names a point of the plane by a distance and an angle. It is built up in angles and polar form .
Iteration, which is applying one rule to its own output over and over, together with the words orbit, bounded and fixed point. That is iteration and orbits .
Nothing else. The test that decides membership is one line of arithmetic, repeated.
Ground covered
The Mandelbrot set defined as a subset of the complex numbers, and the orbit that decides which numbers belong. Why that orbit starts at zero. Squaring read as a rotation of the plane. The escape radius, which turns a test over infinitely many steps into a finite one. The two components whose boundaries are known in closed form, the dimension of the boundary, and the quantity that is still open.
Subset of the complex plane
Each complex number is drawn as a point, with its real part measured along the horizontal axis and its imaginary part up the vertical one. The set of all of them is written .
The Mandelbrot set, written , is a subset of . Every point of the plane is either a member of it or not, and one calculation settles which. That calculation is the subject of the next section.
The set is bounded. Every member lies within distance 2 of the origin, which the section on the escape radius proves. The whole of therefore fits in a small part of the plane.
Membership is not decided by nearness. Two values of a millionth apart can fall on opposite sides, and that is why the boundary carries detail at every magnification. The picture at the top of this page is one small piece of that boundary.
Orbit of zero
Fix a complex number . Apply the map over and over, starting from zero. The map is called quadratic, because appears squared and no higher power of it appears.
The name describes the rule that is repeated, rather than the result of repeating it. Applying the rule twice gives , where now reaches the fourth power. Applying it times reaches the power , so ten steps reach 1024. The rule stays quadratic however often it runs. Squaring and adding are the ordinary arithmetic of complex numbers. The result is a sequence.
That sequence is the orbit of zero, which is the orbit of the map from the starting point 0. Three worked examples, each computed by squaring and adding:
- the orbit runs and repeats forever.
- the orbit runs and repeats after the first two terms.
- the orbit runs and grows without limit.
The first two orbits above stay bounded, which means one fixed distance from the origin holds every term. The third escapes, which means its moduli grow without limit. The Mandelbrot set is the set of values of whose orbit of zero stays bounded.1
So and belong to . The value escapes, and lies outside it. The figure above marks each of those, with a fourth value that also escapes.
Here is the set of all complex numbers, and is one distance that holds every term of the orbit inside it. Which distance does not matter, only that one exists.
The starting value is zero for a reason. The derivative of a map at a point says how much it stretches a small step taken from there. That stretch is the test separating an attracting fixed point from a repelling one. For the derivative is , so at zero it stretches nothing. A point where the derivative is zero is a critical point. The orbit of the critical point decides the behaviour of every other orbit. One sequence per value of is therefore enough.1
The two letters carry different roles. The variable moves along the sequence. The variable is fixed for the whole sequence, and the picture is drawn over . A point of the image is a value of , never a value of .
Squaring as rotation
Write for the modulus of , which is its distance from the origin, and for its argument, which is its direction. Polar form then gives .
Multiplying two complex numbers multiplies their moduli and adds their arguments. Setting both factors to in that rule gives the geometric content of the map.
Squaring doubles the argument and squares the modulus. One step of equation (1) is three operations in sequence:
- Rotate the point to twice its angle.
- Scale its distance to the square of itself.
- Translate it by .
The unit circle is the set of points at modulus one, and squaring behaves differently on each side of it. A point with has and moves inward. A point with has and moves outward. Under repeated squaring alone, with , every point inside the unit circle converges to the origin. Every point outside it escapes. The circle itself is preserved.
Adding breaks that separation. A point moved inward by squaring can be moved back outside by the translation. The two operations together produce the boundary shown below.
Escape radius
Once the modulus of a term passes two, the orbit escapes. The bound follows from the reverse triangle inequality, which states that for any two complex numbers. Suppose and . Then
The second line applies the inequality. The third uses . Write . The factor exceeds one, because . So . The modulus grows, and grows with it. After further steps , and that bound grows without limit.
The condition costs nothing. If then already has modulus above two, so such a lies outside . Every that needs testing satisfies . Every term under test satisfies . The whole set lies inside the disc of radius two, and one comparison decides escape.1
def escapes(c, nmax=400):
"""Return the step at which the orbit of 0 leaves the disc of radius 2."""
z = 0j
for n in range(nmax):
z = z * z + c
if abs(z) > 2.0:
return n
return None
A returned value of None means the orbit survived nmax steps. That is evidence of membership, never proof. No finite computation decides membership for a point of the boundary.
Two exact shapes
The interior of breaks into components. A component is one connected piece of that interior, a region that holds together and touches no other such region. Two of them have shapes given in closed form, and both are drawn over the computed set below.

The main cardioid is the largest component, the heart-shaped region on the right of the figure. It holds the values of for which has an attracting fixed point. A fixed point is a value that the map leaves where it is, so . It attracts when nearby points move towards it under repeated application. That happens when the derivative there has modulus below one, which is .
Substitute . Then , and the fixed-point equation rearranges to . Therefore
and the condition becomes . The main cardioid is the image of the open unit disc under equation (5).1 Its boundary follows from ,
The component attached at holds values of with an attracting orbit of period two. An orbit has period two when it returns to its starting value after two steps. The orbit for does that. That component is a disc of radius one quarter centred at .1 The circle in the figure is that disc drawn from its formula. Components of higher period surround the cardioid.
Filaments and islands
Adrien Douady and John Hubbard proved in 1985 that is connected, meaning it forms a single piece. They built a conformal isomorphism.1 It runs between the outside of and the outside of the closed unit disc. A conformal isomorphism is a map between two regions. It preserves angles, and a map of the same kind undoes it. Its existence shows the outside of is as simple as the outside of a disc.
Every island in a rendering is therefore joined to the main body by a filament. That includes the small copies along the horizontal axis. A filament can be thinner than the pixel grid, so the islands look separate.
Shishikura’s theorem
The boundary of is the set of points that have both members of and non-members arbitrarily close by. Its Hausdorff dimension is two. Hausdorff dimension measures how thoroughly a set fills the space around it. A smooth curve has dimension one. A filled region of the plane has dimension two. A rough curve takes a value in between. Mitsuhiro Shishikura proved that this boundary reaches two, the largest value the plane allows.2
The same is true of the Julia set of for most in the boundary, in a sense the proof makes precise. For a fixed , the Julia set is the boundary between two kinds of starting point. On one side the orbit stays bounded, and on the other it escapes. The Julia set holds fixed and varies the starting point. The set holds the starting point at zero and varies . A set of dimension two has no length that finer measurement converges on. That is why zooming never resolves the edge into a curve.
Pixel counting
The area of is known only from numerical estimates. The best pixel-counting estimate is 1.5065918849. The uncertainty is 2.8 at the tenth decimal place. Thorsten Förstemann obtained it by testing about 87 trillion points.3 The grid was 2097152 by 2097152.
Pixel counting draws the set on a grid and counts the points whose orbit survives the iteration limit. The method converges slowly, because the boundary it resolves has dimension two.
Logistic family
The part of on the horizontal axis is the interval from to . Values of in that interval correspond to the logistic family . That map acts on ordinary numbers and is used in population models. The correspondence is
As rises, the attracting cycle of the logistic family doubles its period again and again. The doublings come at ever closer values of . That sequence of doublings is the period-doubling cascade. Equation (15) carries it onto the components in that interval.1 The cardioid becomes the range of with an attracting fixed point. The disc at becomes the range with an attracting two-cycle.
Figure sources
Every image is generated by a script kept beside this page.
membership.py draws the set as one filled outline. The drawing then follows
the page’s colours, which a raster image cannot do, and it gzips to 19 KB. It
runs the escape test on a grid of 560 by 410 points, to a limit of 120
iterations. It prints the verdict for each of the four marked values.
planes.py draws one step of the map on a ruled plane.
orbit.py draws the two orbits. It writes the animation as CSS inside the
file, so nothing runs to play it. A reader who asks for reduced motion is
given every step at once.
mandelbrot.py computes escape time on a grid of 1600 by 1387 points, to a
limit of 400 iterations. It then draws equation (6) and the period-2 circle
over the result.
zoom.py draws the magnified edge at the top, with a limit of 3000 steps and
a smooth escape count. It then reduces the result to 256 colours.
membership.py, planes.py and mandelbrot.py need NumPy and Matplotlib.
zoom.py needs Pillow as well. orbit.py needs nothing beyond Python.
Each one is published with this page, so it can be read or run without asking
for anything: membership.py, planes.py,
orbit.py, mandelbrot.py and
zoom.py.
python3 orbit.py
uv run --with numpy --with matplotlib python3 membership.py
uv run --with numpy --with matplotlib python3 planes.py
uv run --with numpy --with matplotlib python3 mandelbrot.py
uv run --with numpy --with matplotlib --with pillow python3 zoom.py
References
-
Mandelbrot set. Wikipedia. Retrieved 30 August 2026. https://en.wikipedia.org/wiki/Mandelbrot_set (opens in a new tab) ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
Mitsuhiro Shishikura. The Hausdorff dimension of the boundary of the Mandelbrot set and Julia sets. Annals of Mathematics 147 (1998), 225 to 267. Preprint at https://arxiv.org/abs/math/9201282 (opens in a new tab) ↩︎
-
Thorsten Förstemann. Numerical estimation of the area of the Mandelbrot set. Retrieved 30 August 2026. https://www.foerstemann.name/labor/area/Mset_area.pdf (opens in a new tab) ↩︎