Source code for whatstk.graph.figures.scatter

"""Scatter plot figures."""

from typing import Optional, Dict

import pandas as pd
import plotly.graph_objs as go


[docs]def fig_scatter_time( user_data: pd.DataFrame, username_to_color: Optional[Dict[str, str]] = None, title: str = "", xlabel: Optional[str] = None, ) -> go.Figure: """Obtain Figure to plot using plotly. ``user_data`` must be a pandas.DataFrame with timestamps as index and a column for each user. You can easily generate suitable ``user_data`` using the function :func:`get_interventions_count <whatstk.analysis.get_interventions_count>` (disclaimer: not compatible with ``date_mode='hourweekday'``). Args: user_data (pandas.DataFrame): Input data. Shape nrows x ncols, where nrows = number of timestaps and ncols = number of users. username_to_color (dict, optional). Dictionary mapping username to color. Defaults to None. title (str, optional): Title of figure. Defaults to "". xlabel (str, optional): x-axis label title. Defaults to None. Returns: plotly.graph_objs.Figure .. seealso:: * :func:`get_interventions_count <whatstk.analysis.get_interventions_count>` """ # Create a trace data = [] for username in user_data: trace = go.Scatter( x=user_data.index, y=user_data[username], showlegend=True, name=username, text=user_data.index, line=dict(color=username_to_color[username]) if username_to_color is not None else None, ) data.append(trace) layout = dict(title=title, xaxis=dict(title=xlabel)) fig = go.Figure(data=data, layout=layout) return fig