evaplot
An up-to-date and slimmed down library for opinionated plotting styles with seaborn and matplotlib.
Installation
pip install evaplot
Quick Start
import evaplot
import seaborn as sns
import matplotlib.pyplot as plt
# Apply a style (downloads fonts on first use)
evaplot.set_style("evaplot_rc")
# Use seaborn/matplotlib as usual
fig, ax = plt.subplots()
sns.barplot(data=my_data, x="category", y="value", ax=ax)
plt.show()
Styles
evaplot ships six styles, each using a different Google Font (downloaded automatically on first import):
| Style | Font |
|---|---|
evaplot_rc |
Roboto Condensed |
evaplot_fsc |
Fira Sans Condensed |
evaplot_j |
Jost |
evaplot_m |
Montserrat |
evaplot_sg |
Space Grotesk |
evaplot_tw |
Titillium Web |
Gallery
evaplot_rc — Roboto Condensed
Other styles
evaplot_fsc — Fira Sans Condensed
evaplot_j — Jost
evaplot_m — Montserrat
evaplot_sg — Space Grotesk
evaplot_tw — Titillium Web
Helper Functions
set_cat_palette
Sets the categorical color palette based on the number of categories. Uses dark2 for n ≤ 8 and vivid for larger sets. Returns the full palette as a list of hex strings you can reuse directly for annotations, custom patches, or other matplotlib elements.
colors = evaplot.set_cat_palette(n=5)
# colors → ["#1b9e77", "#d95f02", ...]
# Annotate each bar with its hex color
for i, bar in enumerate(ax.patches):
ax.text(
bar.get_x() + bar.get_width() / 2,
bar.get_height(),
colors[i],
ha="center", va="bottom",
color=colors[i], fontsize=8,
)
rotate_xticklabels
Rotates x-axis tick labels to prevent overlap on busy categorical axes. Works on individual Axes objects and on every panel of a FacetGrid by iterating g.axes.flat.
# single axes
evaplot.rotate_xticklabels(ax, rotation=45)
# every panel in a FacetGrid
for ax in g.axes.flat:
evaplot.rotate_xticklabels(ax, rotation=45)
move_legend
Moves a seaborn legend with sensible bottom-centered defaults.
evaplot.move_legend(ax_or_facetgrid, bbox_to_anchor=(0.5, -0.15), loc="upper center", ncol=3)
adjust_layout
Adjusts subplot spacing and applies tight_layout in one call. Pass g.fig for a seaborn FacetGrid, or omit fig to operate on the current figure.
evaplot.adjust_layout(fig=fig, hspace=0.35, wspace=0.3)
set_facet_col_titles
Simplifies FacetGrid column titles using a template string. By default strips the verbose "col = value" prefix.
evaplot.set_facet_col_titles(g, "{col_name}")
| Before | After |
API Reference
| Function | Description |
|---|---|
set_style(style, n) |
Apply an evaplot style and categorical palette |
set_cat_palette(n) |
Set categorical palette (dark2 for n ≤ 8, vivid otherwise); returns hex color list |
rotate_xticklabels(ax, rotation, ha) |
Rotate x-axis tick labels |
move_legend(obj, bbox_to_anchor, loc, ncol, ...) |
Move a seaborn legend with opinionated defaults |
adjust_layout(fig, hspace, wspace, bottom, rect) |
Adjust subplot spacing and apply tight_layout |
set_facet_col_titles(g, template) |
Set FacetGrid column title template |
show_installed_fonts() |
List font families in evaplot's font cache |
update_matplotlib_fonts() |
Register all cached fonts with matplotlib |
download_googlefont(font, add_to_cache) |
Download a Google Font to the cache |
Credits
evaplot builds on opinionated by Maximilian Noichl.
Noichl, M. (2023). Opinionated: Simple, Clean Stylesheets for Plotting with Matplotlib and Seaborn (Version 0.0.2.8) [Computer software]. https://doi.org/10.5281/zenodo.8329780
License
MPLv2 License
Metadata
Release files for evaplot 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| evaplot-0.1.1.tar.gz | 3.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| evaplot-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.8 MB
Release files / evaplot-0.1.1.tar.gz
| Download URL | evaplot-0.1.1.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c8c07e57e450dade197ebc0c24e2b488b6c7c4805d406c051d35afb5a44d33f
|
|
BLAKE2b-256 checksum How to use checksums |
75e907c52cfebba399093101b8d4a6780d40dc4fd9bd6bc8905dd6ffb24d304d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency logRelease files / evaplot-0.1.1-py3-none-any.whl
| Download URL | evaplot-0.1.1-py3-none-any.whl |
|---|---|
| Size | 447.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d39ec26edef5496d9c5d3ff186e6788333ebad9ee64879b4221783e20c8c4d85
|
|
BLAKE2b-256 checksum How to use checksums |
ee13231870fc765f649bfed9fc03babe01ff1343d9f773b484540a189cc6ec40
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency log