class_docstr: image from analyzer result
  This is an Abstract base class
class_docstr_tok: ["image","from","analyzer","result","This","is","an","Abstract","base","class"]
code: def create(
      cls,
      analyzer,
      analyzer_parameters=None,
      result_id=None,
      grapher_id=None,
      grapher_name=None,
      grapher_version=None,
      background=None,
      staging=False,
  ):
      if analyzer_parameters is None:
          analyzer_parameters = {}
  
      class NewGrapher(cls):
          _id = grapher_id
          _staging = staging
          _from_analyzer = True
  
          _analyzer = analyzer
          _analyzer_parameters = analyzer_parameters
          _result_id = result_id
          _grapher_name = grapher_name
  
          implements(IGrapher)
  
          @interfacedoc
          def __init__(
              self,
              width=1024,
              height=256,
              bg_color=(0, 0, 0),
              color_scheme="default",
          ):
              super(NewGrapher, self).__init__(
                  width, height, bg_color, color_scheme
              )
  
              # Add a parent waveform analyzer
              if background == "waveform":
                  self._background = True
                  bg_analyzer = (
                      timeside.plugins.analyzer.waveform.Waveform()
                  )
                  self._bg_id = bg_analyzer.id()
                  self.parents["bg_analyzer"] = bg_analyzer
              elif background == "spectrogram":
                  self._background = True
                  bg_analyzer = (
                      timeside.plugins.analyzer.spectrogram.Spectrogram()
                  )
                  self._bg_id = bg_analyzer.id()
                  self.parents["bg_analyzer"] = bg_analyzer
  
              else:
                  self._background = None
  
              parent_analyzer = analyzer(**analyzer_parameters)
              self.parents["analyzer"] = parent_analyzer
              self._result_id = result_id
  
          @staticmethod
          @interfacedoc
          def id():
              return grapher_id
  
          @staticmethod
          @interfacedoc
          def version():
              return grapher_version
  
          @staticmethod
          @interfacedoc
          def name():
              return grapher_name
  
          __doc__ = """Image representing """ + grapher_name
  
      NewGrapher.__name__ = grapher_name
  
      return NewGrapher
  
imports: import math
  import numpy
  from timeside.core import Processor, implements, interfacedoc, abstract
  from timeside.core.processor import FixedSizeInputAdapter
  from timeside.core.api import IGrapher
  from timeside.plugins.grapher.utils import smooth, im_watermark, normalize
  import timeside.plugins.analyzer
label_desc: Use image node_id 4 for calling the DisplayAnalyzer obj's underlying member method code with example usage: obj.create(cls, analyzer, analyzer_parameters, result_id, grapher_id, grapher_name, grapher_version, background, staging) and returns: NewGrapher, grapher_id, grapher_version, grapher_name