class_docstr: Graph super class containing generic common functions
class_docstr_tok: ["Graph","super","class","containing","generic","common","functions"]
docstr: Compute secondary axis min max and label positions
code: def _compute_secondary(self):
      """Compute secondary axis min max and label positions"""
      # secondary y axis support
      if self.secondary_series and self._y_labels:
          y_pos = list(zip(*self._y_labels))[1]
          if self.include_x_axis:
              ymin = min(self._secondary_min, 0)
              ymax = max(self._secondary_max, 0)
          else:
              ymin = self._secondary_min
              ymax = self._secondary_max
          steps = len(y_pos)
          left_range = abs(y_pos[-1] - y_pos[0])
          right_range = abs(ymax - ymin) or 1
          scale = right_range / ((steps - 1) or 1)
          self._y_2nd_labels = [
              (self._y_format(ymin + i * scale), pos)
              for i, pos in enumerate(y_pos)
          ]
  
          self._scale = left_range / right_range
          self._scale_diff = y_pos[0]
          self._scale_min_2nd = ymin
  
imports: from math import ceil, cos, sin, sqrt
  from pygal import stats
  from pygal._compat import is_list_like
  from pygal.graph.public import PublicApi
  from pygal.interpolate import INTERPOLATIONS
  from pygal.util import cached_property, compute_scale, cut, decorate, filter_kwargs, get_text_box, get_texts_box, majorize, rad, reverse_text_len, split_title, truncate
  from pygal.view import LogView, ReverseView, View, XYLogView
label_desc: Use image node_id 16 for calling the Graph obj's underlying member method code with example usage: obj._compute_secondary() without return types