- Ryther Anderson
Python Fractal Generation is a package for making interesting/aesthetic fractal images quickly (for Python) and (hopefully) easily. Many unique fractal images can be generated using only a few functions.
pyfracgen
can currently be installed from the following sources (if you want
to install from GH, probably do so using poetry
).
git clone https://github.com/rytheranderson/pyfracgen.git
cd pyfracgen
poetry install
pip install pyfracgen
All the package functions can be accessed from a single import:
import pyfracgen as pf
from matplotlib import pyplot as plt
from matplotlib import colormaps
Image produced with this code:
# x and y bounds, x is the real part and y is the imaginary part
xbound = (
0.3602404434376143632361252444495 - 0.00000000000003,
0.3602404434376143632361252444495 + 0.00000000000025,
)
ybound = (
-0.6413130610648031748603750151793 - 0.00000000000006,
-0.6413130610648031748603750151793 + 0.00000000000013,
)
res = pf.mandelbrot(
xbound, ybound, pf.funcs.power, width=4, height=3, dpi=300, maxiter=5000
)
stacked = pf.images.get_stacked_cmap(colormaps["gist_gray"], 50)
pf.images.image(res, cmap=stacked, gamma=0.8)
plt.savefig("example_images/mandelbrot_ex.png")
Animation produced with this code:
import itertools as itt
reals = itt.chain(np.linspace(-1, 2, 60)[0:-1], np.linspace(2, 3, 40))
series = pf.julia(
(complex(real, 0.75) for real in reals),
xbound=(-1, 1),
ybound=(-0.75, 1.25),
update_func=pf.funcs.magnetic_2,
maxiter=300,
width=5,
height=4,
dpi=200,
)
pf.images.save_animation(
list(series),
cmap=colormaps["ocean"],
gamma=0.6,
file=Path("example_images/julia_animation_ex"),
)
Image produced with this code:
string = "AAAAAABBBBBB"
xbound = (2.5, 3.4)
ybound = (3.4, 4.0)
res = pf.lyapunov(
string, xbound, ybound, width=4, height=3, dpi=300, ninit=2000, niter=2000
)
pf.images.markus_lyapunov_image(
res, colormaps["bone"], colormaps["bone_r"], gammas=(8, 1)
)
plt.savefig("example_images/lyapunov_ex.png")
Image produced with this code:
moves = pf.construct_moves((1, 0), (0, 1))
res = pf.randomwalk(moves, niter=1000000, width=4, height=3, dpi=300)
pf.images.image(res, cmap=colormaps["gnuplot"], gamma=1.0)
plt.savefig("example_images/randomwalk_ex.png")
Image produced with this code:
xbound = (-1.75, 0.85)
ybound = (-1.10, 1.10)
res = pf.buddhabrot(
xbound,
ybound,
ncvals=10000000,
update_func=pf.funcs.power,
horizon=1.0e6,
maxiters=(100, 1000, 10000),
width=4,
height=3,
dpi=300,
)
pf.images.nebula_image(tuple(res), gamma=0.4) # type: ignore[arg-type]
plt.savefig("example_images/buddhabrot_ex.png")
- Mandelbrot
- Julia
- Buddhabrot
- Markus-Lyapunov
- 2D random walks
- Function
image
wrappingmatplotlib.pyplot.imshow
- Function
nebula_image
for Buddhabrot "nebula" coloration - Function
markus_lyapunov_image
for Markus-Lyapunov coloration - Function
save_animation
for animating a sequence of results
Mandelbrot, Julia, and Buddhabrot fractal images are almost always created by
iterating the function iterfuncs
module
of pyfracgen
for a few examples.