A matplotlib-style Python library for generating Mermaid diagrams
Project description
sea-nymph
Do you want to show plots in your documentation? Do you want to avoid committing PNGs to git? Do you have an (un)reasonable dislike for SVG files? Look no further!
sea-nymph generates Mermaid charts from Python — plain text that renders natively on GitHub, GitLab, and most modern documentation tools. No image files, no binary blobs, no xml.
The API is modelled after seaborn: pass a DataFrame, name your columns, get a chart.
sea-nymph uses narwhals under the hood, so it accepts any DataFrame library — pandas, polars, PySpark, and more. Generate your markdown charts with distributed computing.
Installation
pip install sea-nymph
High-level API
import polars as pl
from sea_nymph import barplot, lineplot, countplot, histplot, kdeplot
df = pl.DataFrame({
"month": ["Jan", "Feb", "Mar", "Apr"],
"revenue": [10, 40, 30, 50],
"region": ["North", "North", "South", "South"],
})
fig = barplot(df, x="month", y="revenue")
print(fig.render())
xychart-beta
x-axis [Jan, Feb, Mar, Apr]
y-axis "Revenue" 0 --> 50
bar [10, 40, 30, 50]
Available plot functions
| Function | Description |
|---|---|
barplot |
Bar chart with optional aggregation |
lineplot |
Line chart with optional aggregation |
countplot |
Count (or proportion/percent) of categorical values |
histplot |
Histogram with configurable bins and statistics |
kdeplot |
Kernel density estimate using Silverman's rule |
All functions support a hue parameter for grouped series, hue_order and order for controlling category ordering, and palette for custom colours.
Hue
fig = barplot(df, x="month", y="revenue", hue="region", palette=["#4e79a7", "#f28e2b"])
Stat
countplot and histplot accept a stat parameter:
countplot(df, x="month", stat="percent") # "count" | "percent" | "proportion" | "probability"
histplot(df, x="revenue", stat="density") # "count" | "frequency" | "probability" | "proportion" | "percent" | "density"
Horizontal charts
Pass y instead of x to flip the orientation:
countplot(df, y="region")
kdeplot(df, y="revenue")
Low-level API
For full control, use XYChart from sea_nymph.mermaidplotlib directly:
from sea_nymph.mermaidplotlib import XYChart
months = ["Jan", "Feb", "Mar", "Apr"]
fig = XYChart()
fig.bar(months, [10, 40, 30, 50])
fig.line(months, [15, 35, 25, 45])
fig.xlabel("Month")
fig.ylabel("Revenue (k)")
fig.ylim(0, 60)
fig.title("Sales 2024")
print(fig.render())
xychart-beta
title "Sales 2024"
x-axis "Month" [Jan, Feb, Mar, Apr]
y-axis "Revenue (k)" 0 --> 60
bar [10, 40, 30, 50]
line [15, 35, 25, 45]
Limitations
Mermaid's xychart-beta places all data points equidistantly on the axis. This means:
- Line charts require evenly-spaced numeric x values — sea-nymph raises an error if they are not.
- Histograms require equal-width bins for the same reason — unequal bin widths are rejected.
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 Distribution
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 sea_nymph-1.1.0.tar.gz.
File metadata
- Download URL: sea_nymph-1.1.0.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d26dcb01e5f2d020549b18a54e43668b94be7cd4f41183c6cfc4f6e319d97616
|
|
| MD5 |
962204fca2ef45e35407dbca0fb76c60
|
|
| BLAKE2b-256 |
9d3b0ad204ba1a1d237b99b28bbc359cb72bf10bfbbf660a246db99b3af73e12
|
Provenance
The following attestation bundles were made for sea_nymph-1.1.0.tar.gz:
Publisher:
publish.yml on Excidion/sea-nymph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sea_nymph-1.1.0.tar.gz -
Subject digest:
d26dcb01e5f2d020549b18a54e43668b94be7cd4f41183c6cfc4f6e319d97616 - Sigstore transparency entry: 1075569361
- Sigstore integration time:
-
Permalink:
Excidion/sea-nymph@cc2d65e7e88219eae2d2d68d34decae90be94dab -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Excidion
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cc2d65e7e88219eae2d2d68d34decae90be94dab -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file sea_nymph-1.1.0-py3-none-any.whl.
File metadata
- Download URL: sea_nymph-1.1.0-py3-none-any.whl
- Upload date:
- Size: 14.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1c9c8eabf396217c67ee6983c34059c15062935efe6af967b26b4f0896d69be
|
|
| MD5 |
bd9cc8b74628a8935048dc951945c1de
|
|
| BLAKE2b-256 |
c0eb0e15790e8f4be8ff84061ebf9a601e7f5dd6b9c270cc2adba0977833559b
|
Provenance
The following attestation bundles were made for sea_nymph-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on Excidion/sea-nymph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sea_nymph-1.1.0-py3-none-any.whl -
Subject digest:
e1c9c8eabf396217c67ee6983c34059c15062935efe6af967b26b4f0896d69be - Sigstore transparency entry: 1075569398
- Sigstore integration time:
-
Permalink:
Excidion/sea-nymph@cc2d65e7e88219eae2d2d68d34decae90be94dab -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Excidion
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cc2d65e7e88219eae2d2d68d34decae90be94dab -
Trigger Event:
workflow_dispatch
-
Statement type: