class_docstr: This class computes Ding & VanderWeele's E-value for unmeasured confounding. The E-value is the minimum
  strength of association on the risk ratio scale that an unmeasured confounder would need to have with
  both the treatment and the outcome, conditional on the measured covariates, to fully explain away a specific
  treatment-outcome association.
  
  It benchmarks the E-value against measured confounders using McGowan and Greevy Jr.'s Observed Covariate E-value.
  This approach drops measured confounders and re-fits the estimator, measuring how much the limiting bound of the
  confidence interval changes on the E-value scale. This benchmarks hypothetical unmeasured confounding against each
  of the measured confounders.
  
  See: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4820664/,
  https://dash.harvard.edu/bitstream/handle/1/36874927/EValue_FinalSubmission.pdf, and
  https://arxiv.org/pdf/2011.07030.pdf.
  The implementation is based on the R packages https://github.com/cran/EValue and https://github.com/LucyMcGowan/tipr.
  
  :param estimate: CausalEstimate
  :param estimand: IdentifiedEstimand
  :param data: pd.DataFrame
  :param outcome_name: Outcome variable name
  :param no_effect_baseline: A number to which to shift the observed estimate to. Defaults to 1 for ratio measures (RR, OR, HR)
  and 0 for additive measures (OLS, MD). (Default = None)
docstr: Plots contours showing the combinations of treatment-confounder and confounder-outcome
  risk ratios that would tip the point estimate and confidence limit. The X-axis shows
  the treatment-confounder risk ratio and the Y-axis shows the confounder-outcome risk ratio.
  
  :param num_points_per_contour: number of points to calculate and plot for each contour (Default = 200)
  :param plot_size: size of the plot (Default = (6.4,4.8))
  :param contour_colors: colors for point estimate and confidence limit contour (Default = ["blue", "red"])
  :param benchmarking_color: color for observed covariate E-values. (Default = "green")
  :param xy_limit: plot's maximum x and y value. Default is 2 x E-value. (Default = None)
docstr_tok: ["Plots","contours","showing","the","combinations","of","treatment-confounder","and","confounder-outcome","risk","ratios","that","would","tip","the","point","estimate","and","confidence","limit",".","The","X-axis","shows","the","treatment-confounder","risk","ratio","and","the","Y-axis","shows","the","confounder-outcome","risk","ratio",".",":","param","num_points_per_contour",":","number","of","points","to","calculate","and","plot","for","each","contour","(","Default","=","200",")",":","param","plot_size",":","size","of","the","plot","(","Default","=","(","6.4,4.8",")",")",":","param","contour_colors",":","colors","for","point","estimate","and","confidence","limit","contour","(","Default","=","[","``","blue","''",",","``","red","''","]",")",":","param","benchmarking_color",":","color","for","observed","covariate","E-values",".","(","Default","=","``","green","''",")",":","param","xy_limit",":","plot","'s","maximum","x","and","y","value",".","Default","is","2","x","E-value",".","(","Default","=","None",")"]
code: def plot(
      self,
      num_points_per_contour=200,
      plot_size=(6.4, 4.8),
      contour_colors=["blue", "red"],
      benchmarking_color="green",
      xy_limit=None,
  ):
      """
      Plots contours showing the combinations of treatment-confounder and confounder-outcome
      risk ratios that would tip the point estimate and confidence limit. The X-axis shows
      the treatment-confounder risk ratio and the Y-axis shows the confounder-outcome risk ratio.
  
      :param num_points_per_contour: number of points to calculate and plot for each contour (Default = 200)
      :param plot_size: size of the plot (Default = (6.4,4.8))
      :param contour_colors: colors for point estimate and confidence limit contour (Default = ["blue", "red"])
      :param benchmarking_color: color for observed covariate E-values. (Default = "green")
      :param xy_limit: plot's maximum x and y value. Default is 2 x E-value. (Default = None)
      """
  
      if self.stats is None:
          raise ValueError(
              "Must call ``check_sensitivity'' before calling ``plot''"
          )
  
      fig, ax = plt.subplots(1, 1, figsize=plot_size)
  
      eval_est = self.stats["evalue_estimate"]
      rr = self.stats["converted_estimate"]
      if rr < 1:
          rr = 1 / rr
  
      if xy_limit is None:
          xy_limit = eval_est * 2
  
      self._plot_contour(
          ax,
          rr,
          eval_est,
          num_points_per_contour,
          contour_colors[0],
          xy_limit,
      )
  
      eval_lo = self.stats["evalue_lower_ci"]
      eval_hi = self.stats["evalue_upper_ci"]
      if (eval_lo is None and eval_hi == 1) or (
          eval_hi is None and eval_lo == 1
      ):
          self.logger.info(
              "Plotting contour for point estimate only. Confidence interval is already tipped."
          )
      else:
          if eval_lo is None:
              rr_ci = self.stats["converted_upper_ci"]
              eval_ci = eval_hi
          else:
              rr_ci = self.stats["converted_lower_ci"]
              eval_ci = eval_lo
          if rr_ci < 1:
              rr_ci = 1 / rr_ci
  
          self._plot_contour(
              ax,
              rr_ci,
              eval_ci,
              num_points_per_contour,
              contour_colors[1],
              xy_limit,
              point_est=False,
          )
  
          ax.scatter(
              self.benchmarking_results["observed_covariate_e_value"],
              self.benchmarking_results["observed_covariate_e_value"],
              label="Observed Covariate E-values",
              color=benchmarking_color,
          )
          example_var = self.benchmarking_results.iloc[0]
          obs_evalue = example_var["observed_covariate_e_value"]
          ax.text(obs_evalue, obs_evalue, example_var.name)
  
      ax.set(
          xlabel="$RR_{treatment-confounder}$",
          ylabel="$RR_{confounder-outcome}$",
      )
      plt.ylim(1, xy_limit)
      plt.xlim(1, xy_limit)
      plt.legend()
      plt.show()
  
imports: import copy
  import logging
  import matplotlib.pyplot
  import numpy
  import pandas
  import statsmodels.api
  from dowhy.causal_estimator import CausalEstimate
  from dowhy.causal_estimators.econml import Econml
  from dowhy.causal_estimators.generalized_linear_model_estimator import GeneralizedLinearModelEstimator
  from dowhy.causal_estimators.linear_regression_estimator import LinearRegressionEstimator
  from dowhy.causal_identifier import IdentifiedEstimand
label_desc: Use image node_id 4 for calling the EValueSensitivityAnalyzer obj's underlying member method code with example usage: obj.plot(num_points_per_contour, plot_size, contour_colors, benchmarking_color, xy_limit) without return types