class_docstr: An object designed to perform optimisations based on minimising a cost/objective function.
  It can find parameters for portfolios with
  
  - minimum volatility
  - maximum Sharpe ratio
  - minimum volatility for a given target return
  - maximum Sharpe ratio for a given target volatility
  
  It also provides functions to compute the Efficient Frontier between a range
  of Returns, plot the Efficient Frontier, plot the optimal portfolios
  (minimum Volatility and maximum Sharpe Ratio).
class_docstr_tok: ["An","object","designed","to","perform","optimisations","based","on","minimising","a","cost\/objective","function",".","It","can","find","parameters","for","portfolios","with","-","minimum","volatility","-","maximum","Sharpe","ratio","-","minimum","volatility","for","a","given","target","return","-","maximum","Sharpe","ratio","for","a","given","target","volatility","It","also","provides","functions","to","compute","the","Efficient","Frontier","between","a","range","of","Returns",",","plot","the","Efficient","Frontier",",","plot","the","optimal","portfolios","(","minimum","Volatility","and","maximum","Sharpe","Ratio",")","."]
docstr: Plots the Efficient Frontier.
docstr_tok: ["Plots","the","Efficient","Frontier","."]
code: def plot_efrontier(self) -> None:
      """Plots the Efficient Frontier."""
      if self.efrontier.size == 0:
          # compute efficient frontier first
          self.efficient_frontier()
      plt.plot(
          self.efrontier[:, 0],
          self.efrontier[:, 1],
          linestyle="-.",
          color="black",
          lw=2,
          label="Efficient Frontier",
      )
      plt.title("Efficient Frontier")
      plt.xlabel("Volatility")
      plt.ylabel("Expected Return")
      plt.legend()
  
imports: from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  import matplotlib.pylab
  import numpy
  import pandas
  import scipy.optimize
  import finquant.minimise_fun
  from finquant.data_types import ARRAY_OR_DATAFRAME, ARRAY_OR_LIST, FLOAT, INT, NUMERIC
  from finquant.quants import annualised_portfolio_quantities
  from finquant.type_utilities import type_validation
label_desc: Use image node_id 7 for calling the EfficientFrontier obj's underlying member method code with example usage: obj.plot_efrontier() without return types