Source code for whatstk.graph.figures.boxplot

"""Boxplot figures."""


import plotly.graph_objs as go
from whatstk.utils.utils import COLNAMES_DF


[docs]def fig_boxplot_msglen(df, username_to_color=None, title="", xlabel=None): """Visualize boxplot. Args: df (pandas.DataFrame): Chat data. username_to_color (dict, optional). Dictionary mapping username to color. Defaults to None. title (str, optional): Title for plot. Defaults to "". xlabel (str, optional): x-axis label title. Defaults to None. Returns: plotly.graph_objs.Figure """ df = df.copy() # Get message lengths df[COLNAMES_DF.MESSAGE_LENGTH] = df[COLNAMES_DF.MESSAGE].apply(lambda x: len(x)) # Sort users by median user_stats = df.groupby(COLNAMES_DF.USERNAME)\ .aggregate({COLNAMES_DF.MESSAGE_LENGTH: 'median'})[COLNAMES_DF.MESSAGE_LENGTH].sort_values(ascending=False) # Create a list of traces data = [] for username in user_stats.index: x = df[df[COLNAMES_DF.USERNAME] == username][COLNAMES_DF.MESSAGE_LENGTH] trace = go.Box( y=x.values, showlegend=True, name=username, boxpoints='outliers', marker_color=username_to_color[username] if username_to_color else None ) data.append(trace) layout = dict( title=title, xaxis=dict(title=xlabel) ) fig = go.Figure(data=data, layout=layout) return fig