persona-ui / utils /theme.py
Jac-Zac
Switching to uniform colortheme catpuccin
12cdb17
raw
history blame
2.07 kB
"""Catppuccin Plotly template installer."""
import plotly.graph_objects as go
import plotly.io as pio
from catppuccin import PALETTE
def install_catppuccin_theme(base: str | None = None) -> None:
"""Register a Catppuccin template and alias it as ``plotly_white``.
Call once at startup. Persona-vectors pins ``template="plotly_white"`` on
every figure, so replacing that entry themes all plots without any
per-figure code.
"""
flavor = PALETTE.latte if base == "light" else PALETTE.mocha
c = flavor.colors
bg, surface, line = c.base.hex, c.surface0.hex, c.surface1.hex
text, subtext = c.text.hex, c.subtext1.hex
axis = dict(
gridcolor=line,
zerolinecolor=line,
linecolor=line,
tickcolor=line,
tickfont=dict(color=subtext),
title=dict(font=dict(color=text)),
)
scene_axis = dict(
backgroundcolor=bg,
gridcolor=line,
zerolinecolor=line,
showbackground=True,
color=text,
tickfont=dict(color=subtext),
)
template = go.layout.Template(
layout=dict(
paper_bgcolor=bg,
plot_bgcolor=bg,
font=dict(color=text),
colorway=[
c.blue.hex,
c.mauve.hex,
c.green.hex,
c.peach.hex,
c.teal.hex,
c.pink.hex,
c.yellow.hex,
c.sapphire.hex,
c.lavender.hex,
c.red.hex,
c.sky.hex,
c.maroon.hex,
],
xaxis=axis,
yaxis=axis,
scene=dict(xaxis=scene_axis, yaxis=scene_axis, zaxis=scene_axis),
legend=dict(bgcolor=surface, bordercolor=line, font=dict(color=text)),
colorscale=dict(
diverging=[[0.0, c.blue.hex], [0.5, surface], [1.0, c.red.hex]],
),
)
)
pio.templates["catppuccin"] = template
pio.templates["plotly_white"] = template
pio.templates.default = "catppuccin"