Source code for arviz_plots.style

"""Style/templating helpers."""
from pathlib import Path

from arviz_base import rcParams


[docs] def use(name): """Set an arviz style as the default style/template for all available backends. The style will be set for all backends that support it and have it available. The supported backends are Matplotlib, Plotly and Bokeh. You can use ``arviz_plots.style.available()`` to check which styles are available. The ones that works for all backends are listed under the 'common' key. Parameters ---------- name : str Name of the style to be set as default. Raises ------ ValueError If the style with the given name is not found. """ ok = False try: import matplotlib.pyplot as plt if name in plt.style.available: plt.style.use(name) ok = True except ImportError: pass try: import plotly.io as pio if name in pio.templates: pio.templates.default = name ok = True except ImportError: pass try: from bokeh.io import curdoc from bokeh.themes import Theme path = Path(__file__).parent / "styles" / f"{name}.yml" if path.exists(): curdoc().theme = Theme(filename=str(path)) ok = True except ImportError: pass if not ok: raise ValueError(f"Style {name} not found.")
[docs] def available(): """List available styles. If multiple backends are installed, also lists styles common to all backends under the 'common' key. Returns ------- dict Dictionary with backend names as keys and list of available styles as values. """ styles = {} n_backends = 0 try: import matplotlib.pyplot as plt styles["matplotlib"] = plt.style.available n_backends += 1 except ImportError: pass try: import plotly.io as pio styles["plotly"] = list(pio.templates) n_backends += 1 except ImportError: pass try: from bokeh.themes import built_in_themes path = Path(__file__).parent / "styles" custom = [file.stem for file in path.glob("*.yml") if path.exists()] styles["bokeh"] = list(built_in_themes) + custom n_backends += 1 except ImportError: pass if n_backends > 1: common = set.intersection(*(set(v) for v in styles.values())) styles["common"] = list(common) return styles
[docs] def get(name, backend=None): """Get the style/template with the given name. Parameters ---------- name : str Name of the style/template to get. backend : str Name of the backend to use. Options are 'matplotlib' and 'plotly'. Defaults to ``rcParams["plot.backend"]``. """ if backend is None: backend = rcParams["plot.backend"] if backend not in ["matplotlib", "plotly", "bokeh"]: raise ValueError(f"Default styles/templates are not supported for Backend {backend}") if backend == "matplotlib": import matplotlib.pyplot as plt if name in plt.style.available: return plt.style.library[name] elif backend == "plotly": import plotly.io as pio if name in pio.templates: return pio.templates[name] elif backend == "bokeh": from bokeh.themes import Theme path = Path(__file__).parent / "styles" / f"{name}.yml" if path.exists(): return Theme(filename=path) raise ValueError(f"Style {name} not found.")