Skip to main content

Pure Python implementation of the squarify treemap layout algorithm

Project description

squarify
========

Pure Python implementation of the squarify treemap layout algorithm.

Based on algorithm from Bruls, Huizing, van Wijk, "Squarified Treemaps", but
implements it differently.

Homepage: https://github.com/laserson/squarify

Installation
------------

Using pip:

pip install squarify

or using the source:

git clone git://github.com/laserson/squarify.git
cd squarify
python setup.py install

The last step may require `sudo` if you don't have root access. The `setup.py`
script uses `setuptools`/`distribute`.


Usage
-----

The main function is `squarify` and it takes two things:

* A coordinate system comprising values for the origin (`x` and `y`) and the
width/height (`dx` and `dy`).
* A list of positive values sorted from largest to smallest and normalized to
the total area, i.e., `dx * dy`).

The function returns a list of JSON objects, each one a rectangle with
coordinates corresponding to the given coordinate system and area proportional
to the corresponding value. Here's an example rectangle:

```json
{
"x": 0.0,
"y": 0.0,
"dx": 327.7,
"dy": 433.0
}
```

The rectangles can be easily plotted using, for example, [d3.js](http://d3js.org/).

There is also a version of `squarify` called `padded_squarify` that returns
rectangles that, when laid out, have a bit of padding to show their borders.

The helper function `normalize_sizes` will compute the normalized values.


Example
-------
```python
import squarify

# these values define the coordinate system for the returned rectangles
# the values will range from x to x + width and y to y + height
x = 0.
y = 0.
width = 700.
height = 433.

values = [500, 433, 78, 25, 25, 7]

# values must be sorted descending (and positive, obviously)
values.sort(reverse=True)

# the sum of the values must equal the total area to be laid out
# i.e., sum(values) == width * height
values = squarify.normalize_sizes(values, width, height)

# returns a list of rectangles
rects = squarify.squarify(values, x, y, width, height)

# padded rectangles will probably visualize better for certain cases
padded_rects = squarify.padded_squarify(values, x, y, width, height)
```

The variable `rects` contains

```json
[
{
"dy": 433,
"dx": 327.7153558052434,
"x": 0,
"y": 0
},
{
"dy": 330.0862676056338,
"dx": 372.2846441947566,
"x": 327.7153558052434,
"y": 0
},
{
"dy": 102.9137323943662,
"dx": 215.0977944236371,
"x": 327.7153558052434,
"y": 330.0862676056338
},
{
"dy": 102.9137323943662,
"dx": 68.94160077680677,
"x": 542.8131502288805,
"y": 330.0862676056338
},
{
"dy": 80.40135343309854,
"dx": 88.24524899431273,
"x": 611.7547510056874,
"y": 330.0862676056338
},
{
"dy": 22.51237896126767,
"dx": 88.2452489943124,
"x": 611.7547510056874,
"y": 410.4876210387323
}
]
```

Project details


Download files

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

Source Distribution

squarify-0.1.2.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

squarify-0.1.2-py2.7.egg (3.4 kB view details)

Uploaded Egg

File details

Details for the file squarify-0.1.2.tar.gz.

File metadata

  • Download URL: squarify-0.1.2.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for squarify-0.1.2.tar.gz
Algorithm Hash digest
SHA256 79fb4ea98790ddaec57f4eb44a5fdbbd82fce7fdd86a57385a26bc62bfdf74fe
MD5 169b13216b35dd6f865ef871747b20f5
BLAKE2b-256 2d01dae0a28e50c676f486a9fa7801b51d959ce3101bc8255f027851d3d83d78

See more details on using hashes here.

File details

Details for the file squarify-0.1.2-py2.7.egg.

File metadata

  • Download URL: squarify-0.1.2-py2.7.egg
  • Upload date:
  • Size: 3.4 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for squarify-0.1.2-py2.7.egg
Algorithm Hash digest
SHA256 4e8ae2f3bd821112d71374f3b129fd429ba4db85b402c0421cff267b985dd27e
MD5 f1fd380c2d2d02a6ab44ab7d6a582fb8
BLAKE2b-256 865465c0009940e4c106a9be1e04bfa1096dd4c534a9104305ccf64b939e9427

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page