code: def _get_monthly_risk_analysis_figure(
      report_normal_df: pd.DataFrame,
  ) -> Iterable[py.Figure]:
      """Get analysis monthly graph figure
  
      :param report_normal_df:
      :param report_long_short_df:
      :return:
      """
  
      # if report_normal_df is None and report_long_short_df is None:
      #     return []
      if report_normal_df is None:
          return []
  
      # if report_normal_df is None:
      #     report_normal_df = pd.DataFrame(index=report_long_short_df.index)
  
      # if report_long_short_df is None:
      #     report_long_short_df = pd.DataFrame(index=report_normal_df.index)
  
      _monthly_df = _get_monthly_risk_analysis_with_report(
          report_normal_df=report_normal_df,
          # report_long_short_df=report_long_short_df,
      )
  
      for _feature in [
          "annualized_return",
          "max_drawdown",
          "information_ratio",
          "std",
      ]:
          _temp_df = _get_monthly_analysis_with_feature(
              _monthly_df, _feature
          )
          yield ScatterGraph(
              _temp_df,
              layout=dict(
                  title=_feature,
                  xaxis=dict(type="category", tickangle=45),
              ),
              graph_kwargs={"mode": "lines+markers"},
          ).figure
  
file_path: qlib/qlib/contrib/report/analysis_position/risk_analysis.py
imports: from typing import Iterable
  import pandas
  import plotly.graph_objs
  from ...evaluate import risk_analysis
  from ..graph import SubplotsGraph, ScatterGraph
label_desc: Use image node_id 6 for calling a global function with example usage: _get_monthly_risk_analysis_figure(report_normal_df) and returns: list