code: def __init__(self, df, kind="candlestick", columns=None, **kwargs):
      self.df = df
      self.studies = {}
      self.data = {}
      self.theme = {}
      self.panels = {}
      self.layout = {}
      self.trendlines = []
      self.kwargs = {}
  
      # Set column names
      if not columns:
          columns = {}
          for _ in ["open", "high", "low", "close", "volume"]:
              columns[_] = kwargs.pop(_, "")
      self._d = ta._ohlc_dict(df, **columns)
  
      # Set initial annotations
      annotations = {
          "values": [],
          "params": utils.check_kwargs(
              kwargs, get_annotation_kwargs(), {}, clean_origin=True
          ),
      }
  
      ann_values = kwargs.pop("annotations", None)
  
      if ann_values:
          if utils.is_list(ann_values):
              annotations["values"].extend(ann_values)
          else:
              annotations["values"].append(ann_values)
  
      # self.data initial values
      self.data.update(
          datalegend=kwargs.pop("datalegend", True),
          name=kwargs.pop("name", "Trace 1"),
          kind=kind,
      )
      self.data.update(
          slice=kwargs.pop("slice", (None, None)),
          resample=kwargs.pop("resample", None),
      )
  
      # self.layout initial values
      self.layout["shapes"] = utils.check_kwargs(
          kwargs, get_shapes_kwargs(), {}, clean_origin=True
      )
      for k, v in list(self.layout["shapes"].items()):
          if not isinstance(v, list):
              self.layout["shapes"][k] = [v]
      self.layout["rangeselector"] = kwargs.pop(
          "rangeselector", {"visible": False}
      )
      self.layout["rangeslider"] = kwargs.pop("rangeslider", False)
      self.layout["margin"] = kwargs.pop(
          "margin", dict(t=30, b=30, r=30, l=30)
      )
      self.layout["annotations"] = annotations
      self.layout["showlegend"] = kwargs.pop("showlegend", True)
      self.layout.update(
          utils.check_kwargs(
              kwargs, get_layout_kwargs(), {}, clean_origin=True
          )
      )
  
      # self.theme initial values
      self.theme["theme"] = kwargs.pop(
          "theme", auth.get_config_file()["theme"]
      )
      self.theme["up_color"] = kwargs.pop("up_color", "#17BECF")  # java
      self.theme["down_color"] = kwargs.pop("down_color", "grey")
  
      # self.panels initial values
      self.panels["min_panel_size"] = kwargs.pop("min_panel_size", 0.15)
      self.panels["spacing"] = kwargs.pop("spacing", 0.08)
      self.panels["top_margin"] = kwargs.pop("top_margin", 0.9)
      self.panels["bottom_margin"] = kwargs.pop("top_margin", 0)
      self.update(**kwargs)
  
imports: from __future__ import absolute_import
  import plotly.graph_objs
  import json
  import copy
  import pandas
  from .plotlytools import iplot
  from .None import tools
  from .None import ta
  from .None import utils
  from .None import colors
  from .None import auth
  from .None import date_tools
label_desc: Use image node_id 1 to create a new QuantFig object from inherited base classes: object with example: obj = QuantFig(df, kind, columns)