class_docstr: Generic abstract class for the graphers
class_docstr_tok: ["Generic","abstract","class","for","the","graphers"]
docstr: Draw 2 peaks at x
docstr_tok: ["Draw","2","peaks","at","x"]
code: def draw_peaks(self, x, peaks, line_color):
      """Draw 2 peaks at x"""
  
      y1 = (
          self.image_height * 0.5
          - peaks[0] * (self.image_height - 4) * 0.5
      )
      y2 = (
          self.image_height * 0.5
          - peaks[1] * (self.image_height - 4) * 0.5
      )
  
      if self.previous_y:
          self.draw.line(
              [self.previous_x, self.previous_y, x, y1, x, y2],
              line_color,
          )
      else:
          self.draw.line([x, y1, x, y2], line_color)
  
      self.draw_anti_aliased_pixels(x, y1, y2, line_color)
      self.previous_x, self.previous_y = x, y2
  
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 8 for calling the Grapher obj's underlying member method code with example usage: obj.draw_peaks(x, peaks, line_color) without return types