Skip to main content

Python package for creating beautiful interactive Chord Diagrams.

Project description

ChordPRO

Chord PRO Released

Chord PRO is the full-featured chord visualization API, producing beautiful interactive visualizations, e.g. those featured on the front page of Reddit.

  • Produce beautiful interactive Chord diagrams.
  • Customize colours and font-sizes.
  • Access Divided mode, enabling two sides to your diagram.
  • Add images and text on hover,
  • Access finer-customisations including HTML injection.
  • Allows commercial use without open source requirement.
  • Currently supports Python, JavaScript, and Rust, with many more to come (accepting requests).

Get it here!

Changelog:

  • 23 July 2020 - Chord PRO now supports figure titles.

  • 20 July 2020 - Chord PRO now supports asymmetric mode using symmetric=False! You can also overide the verb used in the popup.

  • 14 July 2020 - Chord PRO can now be enabled by entering your license key.

  • 29 June 2020 - Optimisation and bug fixes to the tooltip have massively improved the interactive performance of the visualisation (Rebuild your chord diagrams to take advantage of this change).

  • 22 May 2020 - Optimisation and bug fixes have massively improved the interactive performance of the visualisation (Rebuild your chord diagrams to take advantage of this change).

  • 21 May 2020 - Please update to the latest version of chord. Backwards compatability has been introduced, so from this version onwards, new versions won't break older ones!

Example Image

Introduction

In a chord diagram (or radial network), entities are arranged radially as segments with their relationships visualised by arcs that connect them. The size of the segments illustrates the numerical proportions, whilst the size of the arc illustrates the significance of the relationships1.

Chord diagrams are useful when trying to convey relationships between different entities, and they can be beautiful and eye-catching.

The Chord Package

I wanted to do a section on Chord Diagrams for my book, Data Is Beautiful.

With Python in mind, there are many libraries available for creating Chord diagrams, such as Plotly, Bokeh, and a few that are lesser-known. However, I wanted to use the implementation from d3 because it can be customised to be highly interactive and to look beautiful.

I couldn't find anything that ticked all the boxes, so I made a wrapper around d3-chord myself. It took some time to get it working, but I wanted to hide away everything behind a single constructor and method call. The tricky part was enabling multiple chord diagrams on the same page, and then loading resources in a way that would support Jupyter Lab.

The primary support is for Jupyter Lab (not the older Jupyter Notebook).

Installation

Available on https://pypi.org/project/chord/ through pip:

pip install chord

Usage

Python

Python (HTML file)

Chord(matrix, names).to_html()

Jupyter Lab (Notebook)

Chord(matrix, names).show()

Defaults

Chord(self,
        matrix,
        names,
        colors="d3.schemeSet1",
        opacity=0.8,
        padding=0.01,
        width=700,
        label_color="#454545",
        wrap_labels=True,
        margin=0,
        credit=False,
    )

Examples

You can see the actual interactive examples on this page. The below examples are screenshots.

The Dataset

The focus for this section will be the demonstration of the chord package. To keep it simple, we will use synthetic data that illustrates the co-occurrences between movie genres within the same movie.

matrix = [
    [0, 5, 6, 4, 7, 4],
    [5, 0, 5, 4, 6, 5],
    [6, 5, 0, 4, 5, 5],
    [4, 4, 4, 0, 5, 5],
    [7, 6, 5, 5, 0, 4],
    [4, 5, 5, 5, 4, 0],
]

names = ["Action", "Adventure", "Comedy", "Drama", "Fantasy", "Thriller"]

Default Settings

Let's see what the Chord() defaults produce when we invoke the show() method.

Chord(matrix, names).show()

Example Image

You can also save it to a HTML file.

Chord(matrix, names).to_html()

Different Colours

The defaults are nice, but what if we want different colours? You can pass in almost anything from d3-scale-chromatic, or you could pass in a list of hexadecimal colour codes.

Chord(matrix, names, colors="d3.schemeSet2").show()

Example Image

Chord(matrix, names, colors=f"d3.schemeGnBu[{len(names)}]").show()

Example Image

Chord(matrix, names, colors="d3.schemeSet3").show()

Example Image

Chord(matrix, names, colors=f"d3.schemePuRd[{len(names)}]").show()

Example Image

Chord(matrix, names, colors=f"d3.schemeYlGnBu[{len(names)}]").show()

Example Image

hex_colours = ["#222222", "#333333", "#4c4c4c", "#666666", "#848484", "#9a9a9a"]

Chord(matrix, names, colors=hex_colours).show()

Example Image

Label Styling

We can disable the wrapped labels, and even change the colour.

Chord(matrix, names, wrap_labels=False, label_color="#4c40bf").show()

Example Image

Opacity

We can also change the default opacity of the relationships.

Chord(matrix, names, opacity=0.1).show()

Example Image

Diagram Size

We can change the maximum diagram size by specifying a width.

Chord(matrix, names, width=400).show()

We can change the padding between chord segments by specifying the padding.

Chord(matrix, names, padding=0.3).show()

  1. Tintarev, N., Rostami, S., & Smyth, B. (2018, April). Knowing the unknown: visualising consumption blind-spots in recommender systems. In Proceedings of the 33rd Annual ACM Symposium on Applied Computing (pp. 1396-1399). 

Credits

  • d3-chord, Mike Bostock.
  • d3-chord gradient fills, Nadieh Bremer.
  • chord (Python), Shahin Rostami.

Example Image


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

chord-0.3.0.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

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

chord-0.3.0-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file chord-0.3.0.tar.gz.

File metadata

  • Download URL: chord-0.3.0.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0.post20200712 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.7.7

File hashes

Hashes for chord-0.3.0.tar.gz
Algorithm Hash digest
SHA256 450718bc73978ccb668a2343021e74b16818311e060b3b4e9896a01a6f5b8469
MD5 2d3ec0b5bb038c4b66f8cade07bf92b6
BLAKE2b-256 137a43e34477299f0cb1ebee9c923314a46d7ff9de3782453e9e9e1c5360211f

See more details on using hashes here.

File details

Details for the file chord-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: chord-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0.post20200712 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.7.7

File hashes

Hashes for chord-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 116577a314f812abff3b5318a58958e55920610b41a222b761dd87c07d643a47
MD5 ddede774b841950ac85bc390abf63863
BLAKE2b-256 c7697803b6ee2486613275bc38ae8ff2a11c691c316a0a7334eb4178d21bb251

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