## PyDLC - Density Line Charts with Python

Python implementation of the Density Line Chart (Moritz & Fisher, 2018) to visualize time series collections.

## Installation

### Python Package Index

``````\$ pip install pydlc
``````

## Usage

### Example

The following example shows how to import and use the `dense_lines` plotting function.

``````import numpy as np
import matplotlib.pyplot as plt
from pydlc import dense_lines

# Generate random synthetic time series
x = np.linspace(0, 90, 25)
ys = []
for _ in range(10000):
ys.append(np.random.randn(1)*np.exp(-x/100))

# Plot here
fig, axs = plt.subplots(1, 2, figsize=(8, 3), sharey=True, sharex=True)
axs.plot(x, np.array(ys).T, lw=1)  # this is slow and cluttered
axs.set_title('Line Chart')
im = dense_lines(ys, x=x, ax=axs, cmap='magma')  # this is fast and clean
axs.set_title('Density Lines Chart')
fig.colorbar(im)
fig.tight_layout()
plt.show()
``````

### Arguments

• ys (`list` of `1darray`): The lines to plot. Can also be
passed as a `2darray`.
• x (`1darray`, optional): The x values corresponding to
the data passed with `ys`. If not provided, `range(0, len(ys))`
is used.
• ax (`matplotlib axes`, optional): The axes to plot on. If not
provided a new figure will be created.
• ny (`int`, optional): The vertical grid size. Higher values
yield a smoother density estimation. Default: 100.
• y_pad (`float`, optional): The padding fraction to set the
grid limits past the data values. Must be greater than 0.
Default: 0.01.
• normalize (`bool`, optional): Normalize the plot so the density
is between 0 and 1. Default: True.
• **kwargs: Arbitrary keyword arguments to pass to `plt.imshow()`.

## Limitations

• All series to be included in the density estimation and passed in the `ys` argument must have the same length.
• The vertical grid size can be adjusted with the `ny` parameter. Higher values of `ny` yield a smoother density visualization. However, the horizontal grid size is currently limited to the same size as the input sequences and there is no parameter to adjust it (yet).

## Algorithm

This graphical abstract explains the algorithm (source). ## GitHub

https://github.com/clberube/pydlc