A Python package for creating transparent data graphs including faded dotplots and shadeplots.
Project description
Paircloud ☔️
A hybrid Python/Rust package for creating beautiful, transparent data graphs, particularly faded dotplots, shadeplots, and classic raincloud plots.
Inspired by Dallas Novakowski's blog post and jorvlan/raincloudplots.
Paircloud leverages a fast Rust backend (via pyo3 and ndarray) for computing Kernel Density Estimations (KDE) and an intuitive Python API (via matplotlib) for rendering the visual components.
Installation
You can install Paircloud using uv:
uv pip install -e .
Features
- Faded Dotplots: Stacked data points that systematically fade (alpha mapping) based on their distance from the distribution's mode or median, preventing overplotting.
- Shadeplots: Density slabs (half-violins) combined with faded dotplots to represent raw data and distributional summaries transparently.
- Raincloud Plots: The ultimate combination of a half-violin, a boxplot for summary statistics, and jittered individual points for full data transparency.
- Paired Rainclouds: Visualize clustered, repeated measures data with matched-jitter connective lines safely overlaid between two distinct populations.
Fast Rust Backend
Traditional KDE plots can be slow for large datasets. Paircloud delegates the intensive O(N×M) density evaluations to compiled Rust via paircloud._paircloud_rs.calc_kde.
Example Usage
import numpy as np
import matplotlib.pyplot as plt
import paircloud
# 1. Generate Fake Data
group1 = np.random.normal(loc=5, scale=1.5, size=400)
group2 = np.random.normal(loc=7, scale=1.2, size=300)
fig, axes = plt.subplots(1, 4, figsize=(24, 6))
# 2. Draw Faded Dotplots
ax = axes[0]
paircloud.faded_dotplot(group1, ax=ax, color="#E63946", position=1, orientation="v")
paircloud.faded_dotplot(group2, ax=ax, color="#457B9D", position=2, orientation="v")
ax.set_title("Faded Dotplots")
# 3. Draw Shadeplots
ax = axes[1]
paircloud.shadeplot(group1, ax=ax, color="#E63946", position=1, orientation="v")
paircloud.shadeplot(group2, ax=ax, color="#457B9D", position=2, orientation="v")
ax.set_title("Shadeplots")
# 4. Draw Classic Rainclouds
ax = axes[2]
paircloud.raincloud(group1, ax=ax, color="#E63946", position=1, orientation="v")
paircloud.raincloud(group2, ax=ax, color="#457B9D", position=2, orientation="v")
ax.set_title("Raincloud Plots")
# 5. Paired Raincloud
ax = axes[3]
paired1 = group1[:300]
paired2 = group2[:300]
paircloud.paired_raincloud(paired1, paired2, ax=ax, colors=("#E63946", "#457B9D"), positions=(1, 2), orientation="v")
ax.set_title("Paired Rainclouds")
plt.show()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file paircloud-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: paircloud-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 298.4 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6b10493619b1b27a7138f8bb6d2239f39d67df15175fc45bcbcee8cc884f226
|
|
| MD5 |
320f55b1e4980555641e194fdffd4e76
|
|
| BLAKE2b-256 |
02590e24aeff19e9727a627c79c0cbb19f95e50840544fe39f2352845ba58478
|
Provenance
The following attestation bundles were made for paircloud-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bilacchi/paircloud
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paircloud-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
e6b10493619b1b27a7138f8bb6d2239f39d67df15175fc45bcbcee8cc884f226 - Sigstore transparency entry: 996319393
- Sigstore integration time:
-
Permalink:
bilacchi/paircloud@bbdac24b0df54f441713b2355badd68fd700dde7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bilacchi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@bbdac24b0df54f441713b2355badd68fd700dde7 -
Trigger Event:
push
-
Statement type: