code: def graph_options(self, element, ranges, style, **kwargs):
      style = dict(style)
      opts = dict(
          style=style.pop("mapboxstyle", "white-bg"),
          accesstoken=style.pop("accesstoken", None),
      )
      # Extract URL and lower case wildcard characters for mapbox
      url = element.data
      if url:
          layer = {}
          opts["layers"] = [layer]
  
          # element.data is xyzservices.TileProvider
          if isinstance(element.data, dict):
              layer["source"] = [
                  element.data.build_url(scale_factor="@2x")
              ]
              layer["sourceattribution"] = element.data.html_attribution
              layer["minzoom"] = element.data.get("min_zoom", 0)
              layer["maxzoom"] = element.data.get("max_zoom", 20)
          else:
              for v in ["X", "Y", "Z"]:
                  url = url.replace("{%s}" % v, "{%s}" % v.lower())
              layer["source"] = [url]
  
              for key, attribution in _ATTRIBUTIONS.items():
                  if all(k in element.data for k in key):
                      layer["sourceattribution"] = attribution
  
          layer["below"] = "traces"
          layer["sourcetype"] = "raster"
          # Remaining style options are layer options
          layer.update(
              {STYLE_ALIASES.get(k, k): v for k, v in style.items()}
          )
  
      return opts
  
file_path: holoviews/holoviews/plotting/plotly/tiles.py
imports: import numpy
  from holoviews.element.tiles import _ATTRIBUTIONS
  from holoviews.plotting.plotly import ElementPlot
  from holoviews.plotting.plotly.util import STYLE_ALIASES
label_desc: Use image node_id 3 for calling the TilePlot obj's underlying member method code with example usage: obj.graph_options(element, ranges, style) and returns: opts