@export
def display_timeline_values(data: pd.DataFrame, y: str, time_column: str='TimeGenerated', source_columns: list=None, **kwargs) -> figure:
    '\n    Display a timeline of events.\n\n    Parameters\n    ----------\n    data : pd.DataFrame\n        DataFrame as a single data set or grouped into individual\n        plot series using the `group_by` parameter\n    time_column : str, optional\n        Name of the timestamp column\n        (the default is \'TimeGenerated\')\n    y : str\n        The column name holding the value to plot vertically\n    source_columns : list, optional\n        List of default source columns to use in tooltips\n        (the default is None)\n\n    Other Parameters\n    ----------------\n    x : str, optional\n        alias of `time_column`\n    title : str, optional\n        Title to display (the default is None)\n    ref_event : Any, optional\n        Add a reference line/label using the alert time (the default is None)\n    ref_time : datetime, optional\n        Add a reference line/label using `ref_time` (the default is None)\n    group_by : str\n        (where `data` is a DataFrame)\n        The column to group timelines on\n    legend_column : str, optional\n        (where `data` is a DataFrame)\n        Name of the column used to generate the legend labels if a legend is\n        to be displayed. Default is `group_by` parameter.\n    yaxis : bool, optional\n        Whether to show the yaxis and labels\n    range_tool : bool, optional\n        Show the the range slider tool (default is True)\n    height : int, optional\n        The height of the plot figure\n        (the default is auto-calculated height)\n    width : int, optional\n        The width of the plot figure (the default is 900)\n    color : str\n        Default series color (default is "navy"). This is overridden by\n        automatic color assignments if plotting a grouped chart\n    kind : Union[str, List[str]]\n        one or more glyph types to plot., optional\n        Supported types are "circle", "line" and "vbar" (default is "vbar")\n\n    Returns\n    -------\n    figure\n        The bokeh plot figure.\n\n    '
    reset_output()
    output_notebook()
    height: int = kwargs.pop('height', None)
    width: int = kwargs.pop('width', 900)
    title: str = kwargs.pop('title', None)
    time_column = kwargs.get('x', time_column)
    group_by: str = kwargs.get('group_by', None)
    show_yaxis: bool = kwargs.pop('yaxis', True)
    show_range: bool = kwargs.pop('range_tool', True)
    color: str = kwargs.get('color', 'navy')
    legend_pos: str = kwargs.pop('legend', None)
    kind: Any = kwargs.pop('kind', ['vbar'])
    plot_kinds = (kind if isinstance(kind, list) else [kind])
    (ref_time, ref_label) = _get_ref_event_time(**kwargs)
    (graph_df, group_count_df, tool_tip_columns, series_count) = _create_data_grouping(data, source_columns, time_column, group_by, color)
    tool_tip_items = [(f'{col}', f'@{col}') for col in tool_tip_columns]
    hover = HoverTool(tooltips=tool_tip_items, formatters={'Tooltip': 'printf'})
    title = (title if title else 'Timeline')
    min_time = graph_df[time_column].min()
    max_time = graph_df[time_column].max()
    start_range = (min_time - ((max_time - min_time) * 0.1))
    end_range = (max_time + ((max_time - min_time) * 0.1))
    height = (height if height else _calc_auto_plot_height(series_count))
    plot = figure(x_range=(start_range, end_range), min_border_left=50, plot_height=height, plot_width=width, x_axis_label='Event Time', x_axis_type='datetime', x_minor_ticks=10, y_axis_label=y, tools=[hover, 'xwheel_zoom', 'box_zoom', 'reset', 'save', 'xpan'], toolbar_location='above', title=title)
    plot.yaxis.visible = show_yaxis
    plot.ygrid.minor_grid_line_color = 'navy'
    plot.ygrid.minor_grid_line_alpha = 0.1
    plot.ygrid.grid_line_color = 'navy'
    plot.ygrid.grid_line_alpha = 0.3
    plot.xgrid.minor_grid_line_color = 'navy'
    plot.xgrid.minor_grid_line_alpha = 0.1
    plot.xgrid.grid_line_color = 'navy'
    plot.xgrid.grid_line_alpha = 0.3
    plot.xaxis[0].formatter = _get_tick_formatter()
    if group_by:
        legend_items = []
        for (_, group_id) in group_count_df[group_by].items():
            first_group_item = graph_df[(graph_df[group_by] == group_id)].iloc[0]
            legend_label = str(first_group_item[group_by])
            inline_legend = (str(group_id) if (legend_pos == 'inline') else None)
            group_color = first_group_item['color']
            row_source = ColumnDataSource(graph_df[(graph_df[group_by] == group_id)])
            p_series = []
            plot_args: Dict[(str, Any)] = dict(x=time_column, alpha=0.7, source=row_source, legend_label=str(inline_legend))
            if ('vbar' in plot_kinds):
                p_series.append(plot.vbar(top=y, width=4, color='color', **plot_args))
            if ('circle' in plot_kinds):
                p_series.append(plot.circle(y=y, size=4, color='color', **plot_args))
            if ('line' in plot_kinds):
                p_series.append(plot.line(y=y, line_width=1, line_color=group_color, **plot_args))
            if (not inline_legend):
                legend_items.append((legend_label, p_series))
        if (legend_pos == 'inline'):
            plot.legend.location = 'top_left'
            plot.legend.click_policy = 'hide'
        elif (legend_pos in ['left', 'right']):
            ext_legend = Legend(items=legend_items, location='center', click_policy='hide', label_text_font_size='8pt')
            plot.add_layout(ext_legend, legend_pos)
    else:
        plot_args = dict(x=time_column, color='color', alpha=0.7, source=ColumnDataSource(graph_df))
        if ('vbar' in plot_kinds):
            plot.vbar(top=y, width=4, **plot_args)
        if ('circle' in plot_kinds):
            plot.circle(y=y, size=4, **plot_args)
        if ('line' in plot_kinds):
            plot.line(y=y, line_width=4, **plot_args)
    if (ref_time is not None):
        _add_ref_line(plot, ref_time, ref_label, series_count)
    if show_range:
        rng_select = _create_range_tool(data=graph_df, min_time=min_time, max_time=max_time, plot_range=plot.x_range, width=width, height=height, time_column=time_column)
        show(column(plot, rng_select))
    else:
        show(plot)
    return plot
Display a timeline of events.

Parameters
----------
data : pd.DataFrame
    DataFrame as a single data set or grouped into individual
    plot series using the `group_by` parameter
time_column : str, optional
    Name of the timestamp column
    (the default is 'TimeGenerated')
y : str
    The column name holding the value to plot vertically
source_columns : list, optional
    List of default source columns to use in tooltips
    (the default is None)

Other Parameters
----------------
x : str, optional
    alias of `time_column`
title : str, optional
    Title to display (the default is None)
ref_event : Any, optional
    Add a reference line/label using the alert time (the default is None)
ref_time : datetime, optional
    Add a reference line/label using `ref_time` (the default is None)
group_by : str
    (where `data` is a DataFrame)
    The column to group timelines on
legend_column : str, optional
    (where `data` is a DataFrame)
    Name of the column used to generate the legend labels if a legend is
    to be displayed. Default is `group_by` parameter.
yaxis : bool, optional
    Whether to show the yaxis and labels
range_tool : bool, optional
    Show the the range slider tool (default is True)
height : int, optional
    The height of the plot figure
    (the default is auto-calculated height)
width : int, optional
    The width of the plot figure (the default is 900)
color : str
    Default series color (default is "navy"). This is overridden by
    automatic color assignments if plotting a grouped chart
kind : Union[str, List[str]]
    one or more glyph types to plot., optional
    Supported types are "circle", "line" and "vbar" (default is "vbar")

Returns
-------
figure
    The bokeh plot figure.
@export
def display_timeline_values(data: pd.DataFrame, y: str, time_column: str='TimeGenerated', source_columns: list=None, **kwargs) -> figure:
    '\n    Display a timeline of events.\n\n    Parameters\n    ----------\n    data : pd.DataFrame\n        DataFrame as a single data set or grouped into individual\n        plot series using the `group_by` parameter\n    time_column : str, optional\n        Name of the timestamp column\n        (the default is \'TimeGenerated\')\n    y : str\n        The column name holding the value to plot vertically\n    source_columns : list, optional\n        List of default source columns to use in tooltips\n        (the default is None)\n\n    Other Parameters\n    ----------------\n    x : str, optional\n        alias of `time_column`\n    title : str, optional\n        Title to display (the default is None)\n    ref_event : Any, optional\n        Add a reference line/label using the alert time (the default is None)\n    ref_time : datetime, optional\n        Add a reference line/label using `ref_time` (the default is None)\n    group_by : str\n        (where `data` is a DataFrame)\n        The column to group timelines on\n    legend_column : str, optional\n        (where `data` is a DataFrame)\n        Name of the column used to generate the legend labels if a legend is\n        to be displayed. Default is `group_by` parameter.\n    yaxis : bool, optional\n        Whether to show the yaxis and labels\n    range_tool : bool, optional\n        Show the the range slider tool (default is True)\n    height : int, optional\n        The height of the plot figure\n        (the default is auto-calculated height)\n    width : int, optional\n        The width of the plot figure (the default is 900)\n    color : str\n        Default series color (default is "navy"). This is overridden by\n        automatic color assignments if plotting a grouped chart\n    kind : Union[str, List[str]]\n        one or more glyph types to plot., optional\n        Supported types are "circle", "line" and "vbar" (default is "vbar")\n\n    Returns\n    -------\n    figure\n        The bokeh plot figure.\n\n    '
    reset_output()
    output_notebook()
    height: int = kwargs.pop('height', None)
    width: int = kwargs.pop('width', 900)
    title: str = kwargs.pop('title', None)
    time_column = kwargs.get('x', time_column)
    group_by: str = kwargs.get('group_by', None)
    show_yaxis: bool = kwargs.pop('yaxis', True)
    show_range: bool = kwargs.pop('range_tool', True)
    color: str = kwargs.get('color', 'navy')
    legend_pos: str = kwargs.pop('legend', None)
    kind: Any = kwargs.pop('kind', ['vbar'])
    plot_kinds = (kind if isinstance(kind, list) else [kind])
    (ref_time, ref_label) = _get_ref_event_time(**kwargs)
    (graph_df, group_count_df, tool_tip_columns, series_count) = _create_data_grouping(data, source_columns, time_column, group_by, color)
    tool_tip_items = [(f'{col}', f'@{col}') for col in tool_tip_columns]
    hover = HoverTool(tooltips=tool_tip_items, formatters={'Tooltip': 'printf'})
    title = (title if title else 'Timeline')
    min_time = graph_df[time_column].min()
    max_time = graph_df[time_column].max()
    start_range = (min_time - ((max_time - min_time) * 0.1))
    end_range = (max_time + ((max_time - min_time) * 0.1))
    height = (height if height else _calc_auto_plot_height(series_count))
    plot = figure(x_range=(start_range, end_range), min_border_left=50, plot_height=height, plot_width=width, x_axis_label='Event Time', x_axis_type='datetime', x_minor_ticks=10, y_axis_label=y, tools=[hover, 'xwheel_zoom', 'box_zoom', 'reset', 'save', 'xpan'], toolbar_location='above', title=title)
    plot.yaxis.visible = show_yaxis
    plot.ygrid.minor_grid_line_color = 'navy'
    plot.ygrid.minor_grid_line_alpha = 0.1
    plot.ygrid.grid_line_color = 'navy'
    plot.ygrid.grid_line_alpha = 0.3
    plot.xgrid.minor_grid_line_color = 'navy'
    plot.xgrid.minor_grid_line_alpha = 0.1
    plot.xgrid.grid_line_color = 'navy'
    plot.xgrid.grid_line_alpha = 0.3
    plot.xaxis[0].formatter = _get_tick_formatter()
    if group_by:
        legend_items = []
        for (_, group_id) in group_count_df[group_by].items():
            first_group_item = graph_df[(graph_df[group_by] == group_id)].iloc[0]
            legend_label = str(first_group_item[group_by])
            inline_legend = (str(group_id) if (legend_pos == 'inline') else None)
            group_color = first_group_item['color']
            row_source = ColumnDataSource(graph_df[(graph_df[group_by] == group_id)])
            p_series = []
            plot_args: Dict[(str, Any)] = dict(x=time_column, alpha=0.7, source=row_source, legend_label=str(inline_legend))
            if ('vbar' in plot_kinds):
                p_series.append(plot.vbar(top=y, width=4, color='color', **plot_args))
            if ('circle' in plot_kinds):
                p_series.append(plot.circle(y=y, size=4, color='color', **plot_args))
            if ('line' in plot_kinds):
                p_series.append(plot.line(y=y, line_width=1, line_color=group_color, **plot_args))
            if (not inline_legend):
                legend_items.append((legend_label, p_series))
        if (legend_pos == 'inline'):
            plot.legend.location = 'top_left'
            plot.legend.click_policy = 'hide'
        elif (legend_pos in ['left', 'right']):
            ext_legend = Legend(items=legend_items, location='center', click_policy='hide', label_text_font_size='8pt')
            plot.add_layout(ext_legend, legend_pos)
    else:
        plot_args = dict(x=time_column, color='color', alpha=0.7, source=ColumnDataSource(graph_df))
        if ('vbar' in plot_kinds):
            plot.vbar(top=y, width=4, **plot_args)
        if ('circle' in plot_kinds):
            plot.circle(y=y, size=4, **plot_args)
        if ('line' in plot_kinds):
            plot.line(y=y, line_width=4, **plot_args)
    if (ref_time is not None):
        _add_ref_line(plot, ref_time, ref_label, series_count)
    if show_range:
        rng_select = _create_range_tool(data=graph_df, min_time=min_time, max_time=max_time, plot_range=plot.x_range, width=width, height=height, time_column=time_column)
        show(column(plot, rng_select))
    else:
        show(plot)
    return plot