code: def _compute_x_labels(self):
      x_pos = compute_scale(
          self._box.xmin,
          self._box.xmax,
          self.logarithmic,
          self.order_min,
          self.min_scale,
          self.max_scale,
      )
      if self.x_labels:
          self._x_labels = []
          for i, x_label in enumerate(self.x_labels):
              if isinstance(x_label, dict):
                  pos = self._x_adapt(x_label.get("value"))
                  title = x_label.get("label", self._x_format(pos))
              elif isinstance(x_label, str):
                  pos = self._x_adapt(x_pos[i % len(x_pos)])
                  title = x_label
              else:
                  pos = self._x_adapt(x_label)
                  title = self._x_format(pos)
  
              self._x_labels.append((title, pos))
          self._box.xmin = min(
              self._box.xmin, min(cut(self._x_labels, 1))
          )
          self._box.xmax = max(
              self._box.xmax, max(cut(self._x_labels, 1))
          )
  
      else:
          self._x_labels = list(zip(map(self._x_format, x_pos), x_pos))
  
imports: from pygal.graph.graph import Graph
  from pygal.util import compute_scale, cut
label_desc: Use image node_id 2 for calling the Dual obj's underlying member method code with example usage: obj._compute_x_labels() without return types