class_docstr: Class for benchmarking multiple ForecastConfig on a rolling window basis.
  
  Attributes
  ----------
  df : `pandas.DataFrame`
      Timeseries data to forecast.
      Contains columns [`time_col`, `value_col`], and optional regressor columns.
      Regressor columns should include future values for prediction.
  
  configs : `Dict` [`str`,  `ForecastConfig`]
      Dictionary of model configurations.
      A model configuration is a ``ForecastConfig``.
      See :class:`~greykite.framework.templates.autogen.forecast_config.ForecastConfig` for details on
      valid ``ForecastConfig``.
      Validity of the ``configs`` for benchmarking is checked via the ``validate`` method.
  
  tscv : `~greykite.sklearn.cross_validation.RollingTimeSeriesSplit`
      Cross-validation object that determines the rolling window evaluation.
      See :class:`~greykite.sklearn.cross_validation.RollingTimeSeriesSplit` for details.
      The ``forecast_horizon`` and ``periods_between_train_test`` parameters of ``configs`` are
      matched against that of ``tscv``. A ValueError is raised if there is a mismatch.
  
  forecaster : `~greykite.framework.templates.forecaster.Forecaster`
      Forecaster used to create the forecasts.
  
  is_run : bool, default False
      Indicator of whether the `run` method is executed.
      After executing `run`, this indicator is set to True.
      Some class methods like ``get_forecast`` requires ``is_run`` to be True
      to be executed.
  
  result : `dict`
      Stores the benchmarking results. Has the same keys as ``configs``.
  
  forecasts : `pandas.DataFrame`, default None
      Merged DataFrame of forecasts, upper and lower confidence interval for all
      input ``configs``. Also stores train end date and forecast step for each prediction.
docstr: Returns a barplot of the train and test values of ``metric_dict`` of ``config_names``.
  Value of a metric for all ``config_names`` are plotted as a grouped bar.
  Train and test values of a metric are plot side-by-side for easy comparison.
  
  Parameters
  ----------
  metric_dict : `dict` [`str`, `callable`]
      Evaluation metrics to compute. Same as
      `~greykite.framework.framework.benchmark.benchmark_class.BenchmarkForecastConfig.get_evaluation_metrics`.
      To get the best visualization, keep number of metrics <= 2.
  config_names : `list` [`str`], default None
      Which config results to plot. A list of config names.
      If None, uses all the available config keys.
  xlabel : `str` or None, default None
      x-axis label.
  ylabel : `str` or None, default "Metric value"
      y-axis label.
  title : `str` or None, default None
      Plot title.
  showlegend : `bool`, default True
      Whether to show the legend.
  
  Returns
  -------
   fig : `plotly.graph_objects.Figure`
      Interactive plotly bar plot.
docstr_tok: ["Returns","a","barplot","of","the","train","and","test","values","of","``","metric_dict","``","of","``","config_names","``",".","Value","of","a","metric","for","all","``","config_names","``","are","plotted","as","a","grouped","bar",".","Train","and","test","values","of","a","metric","are","plot","side-by-side","for","easy","comparison",".","Parameters","--","--","--","--","--","metric_dict",":","`","dict","`","[","`","str","`",",","`","callable","`","]","Evaluation","metrics","to","compute",".","Same","as","`","~greykite.framework.framework.benchmark.benchmark_class.BenchmarkForecastConfig.get_evaluation_metrics","`",".","To","get","the","best","visualization",",","keep","number","of","metrics","<","=","2.","config_names",":","`","list","`","[","`","str","`","]",",","default","None","Which","config","results","to","plot",".","A","list","of","config","names",".","If","None",",","uses","all","the","available","config","keys",".","xlabel",":","`","str","`","or","None",",","default","None","x-axis","label",".","ylabel",":","`","str","`","or","None",",","default","``","Metric","value","''","y-axis","label",".","title",":","`","str","`","or","None",",","default","None","Plot","title",".","showlegend",":","`","bool","`",",","default","True","Whether","to","show","the","legend",".","Returns","--","--","--","-","fig",":","`","plotly.graph_objects.Figure","`","Interactive","plotly","bar","plot","."]
code: def plot_evaluation_metrics(
      self,
      metric_dict: Dict,
      config_names: List = None,
      xlabel: str = None,
      ylabel: str = "Metric value",
      title: str = None,
      showlegend: bool = True,
  ):
      """Returns a barplot of the train and test values of ``metric_dict`` of ``config_names``.
      Value of a metric for all ``config_names`` are plotted as a grouped bar.
      Train and test values of a metric are plot side-by-side for easy comparison.
  
      Parameters
      ----------
      metric_dict : `dict` [`str`, `callable`]
          Evaluation metrics to compute. Same as
          `~greykite.framework.framework.benchmark.benchmark_class.BenchmarkForecastConfig.get_evaluation_metrics`.
          To get the best visualization, keep number of metrics <= 2.
      config_names : `list` [`str`], default None
          Which config results to plot. A list of config names.
          If None, uses all the available config keys.
      xlabel : `str` or None, default None
          x-axis label.
      ylabel : `str` or None, default "Metric value"
          y-axis label.
      title : `str` or None, default None
          Plot title.
      showlegend : `bool`, default True
          Whether to show the legend.
  
      Returns
      -------
       fig : `plotly.graph_objects.Figure`
          Interactive plotly bar plot.
      """
      evaluation_metrics_df = self.get_evaluation_metrics(
          metric_dict=metric_dict, config_names=config_names
      )
  
      # This function groups by config name
      evaluation_metrics_df = (
          evaluation_metrics_df.drop(columns=["split_num"])
          .groupby("config_name")
          .mean()
          .dropna(how="all")
      )
  
      # Rearranges columns so that train and test error of a config are side by side
      plot_df = pd.DataFrame()
      for metric_name in metric_dict.keys():
          plot_df[f"train_{metric_name}"] = evaluation_metrics_df[
              f"train_{metric_name}"
          ]
          plot_df[f"test_{metric_name}"] = evaluation_metrics_df[
              f"test_{metric_name}"
          ]
  
      if title is None:
          title = "Average evaluation metric across rolling windows"
      data = []
      # Each row (index) is a config. Adds each row to the bar plot.
      for index in plot_df.index:
          data.append(
              go.Bar(
                  name=index,
                  x=plot_df.columns,
                  y=plot_df.loc[index].values,
              )
          )
      layout = go.Layout(
          xaxis=dict(title=xlabel),
          yaxis=dict(title=ylabel),
          title=title,
          title_x=0.5,
          showlegend=showlegend,
          barmode="group",
      )
      fig = go.Figure(data=data, layout=layout)
  
      return fig
  
imports: from typing import Dict
  from typing import List
  import numpy
  import pandas
  import plotly.graph_objects
  from plotly.colors import DEFAULT_PLOTLY_COLORS
  from tqdm.autonotebook import tqdm
  from greykite.common.constants import ACTUAL_COL
  from greykite.common.constants import PREDICTED_COL
  from greykite.common.constants import PREDICTED_LOWER_COL
  from greykite.common.constants import PREDICTED_UPPER_COL
  from greykite.common.constants import TIME_COL
  from greykite.common.constants import VALUE_COL
  from greykite.common.evaluation import EvaluationMetricEnum
  from greykite.common.evaluation import add_finite_filter_to_scorer
  from greykite.common.logging import LoggingLevelEnum
  from greykite.common.logging import log_message
  from greykite.common.python_utils import get_pattern_cols
  from greykite.common.viz.timeseries_plotting import plot_multivariate
  from greykite.common.viz.timeseries_plotting import plot_multivariate_grouped
  from greykite.framework.benchmark.benchmark_class_helper import forecast_pipeline_rolling_evaluation
  from greykite.framework.constants import FORECAST_STEP_COL
  from greykite.framework.templates.autogen.forecast_config import ForecastConfig
  from greykite.framework.templates.forecaster import Forecaster
  from greykite.sklearn.cross_validation import RollingTimeSeriesSplit
label_desc: Use image node_id 8 for calling the BenchmarkForecastConfig obj's underlying member method code with example usage: obj.plot_evaluation_metrics(metric_dict, config_names, xlabel, ylabel, title, showlegend) and returns: fig