Skip to main content

Circle packing algorithm for Python

Project description

Pure Python implementation of circle packing layout algorithm.

Circles are first arranged via a version of A1.0 by Huang et al (see for details) and then enclosed in a circle created around them using Matoušek-Sharir-Welzl algorithm used in d3js (see,, and


Compatible with Python 2.7 and Python 3.2+.

Using pip:

pip install circlify

or using the source:

git clone git://
cd circlify
python install

The last step may require sudo if you don’t have root access. The script uses setuptools/distribute.


The main function circlify is supported by a small data class circlify.Circle and takes 3 parameters:

  • A list of positive values sorted from largest to smallest.
  • (optional) A target enclosure where the packed circles should fit. It defaults to the unit circle (0, 0, 1).
  • (optional) A boolean indicating if the target enclosure should be appended to the output.

The function returns a list of circlify.Circle objects, each one corresponding to the coordinates and radius of cirlces proportional to the corresponding input value.


import circlify as circ

data = [19, 17, 13, 11, 7, 5, 3, 2, 1]
circles = circ.circlify(, with_enclosure=True)

The variable circles contains (last one is the enclosure):

[circ.Circle(x=0.35776879346704843, y=-0.13064957525245907, r=0.39529216048201216),
 circ.Circle(x=-0.411432317820337, y=-0.13064957525245907, r=0.3739089508053733),
 circ.Circle(x=-0.04661299415374866, y=0.4678014425767657, r=0.32697389223002427),
 circ.Circle(x=-0.045884607890591435, y=-0.6977206243364218, r=0.3007722353441051),
 circ.Circle(x=-0.6132109517981927, y=0.4490810687795324, r=0.23993324126007678),
 circ.Circle(x=0.48296614887228806, y=0.4541723195782383, r=0.20278059970175755),
 circ.Circle(x=0.3252787490004198, y=0.7776370388468007, r=0.15707317711577193),
 circ.Circle(x=-0.40283175658099674, y=0.7512387781681531, r=0.12824971207048294),
 circ.Circle(x=0.09222041925800777, y=0.8617116738294696, r=0.09068624109026069),
 circ.Circle(x=0.0, y=0.0, r=1.0)]

A simple matplotlib representation. See circlify.bubbles helper function:

visualization of circlify circle packing of first 9 prime numbers.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
circlify-0.9.1.tar.gz (6.3 kB) Copy SHA256 hash SHA256 Source None Jun 14, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page