Source code for altair_recipes.boxplot

"""Boxplot implementation."""
from .common import multivariate_preprocess
from .signatures import multivariate_recipe, use_color
import altair as alt
from autosig import autosig, Signature


[docs]@autosig(multivariate_recipe + Signature(color=use_color(position=3))) def boxplot(data=None, columns=None, group_by=None, color=False, height=600, width=800): """Generate a boxplot.""" data, key, value = multivariate_preprocess(data, columns, group_by) # long form assumed from here chart = alt.Chart(height=height, width=width) chart_bar = chart.mark_bar(stroke="black", fill="#4682b4") chart_tick = chart.mark_tick(color="black") x = key + ":N" stats = { stat: stat + "(" + value + ")" for stat in ["min", "max", "median", "q1", "q3"] } ticks = {tick: chart_tick.encode(x=x, y=stats[tick]) for tick in ["min", "max"]} encode_args = dict(x=x) if color: encode_args["fill"] = key + ":N" q1_bar = chart_bar.encode(y=stats["q1"], y2=stats["median"], **encode_args) q3_bar = chart_bar.encode(y=stats["median"], y2=stats["q3"], **encode_args) rule = chart.mark_rule().encode( x=x, y=alt.Y(stats["min"], axis=alt.Axis(title=value)), y2=stats["max"] ) return (rule + ticks["min"] + ticks["max"] + q1_bar + q3_bar).properties(data=data)