code: def _visualize(self, x_label, y_labels, ticks, overlay, draw, annotate, width=6, height=4):
          
          for label in y_labels:
              if not all(isinstance(x, numbers.Real) for x in self[label]):
                  raise ValueError("The column '{0}' contains non-numerical "
                      "values. A plot cannot be drawn for this column."
                      .format(label))
  
          n = len(y_labels)
          colors = list(itertools.islice(itertools.cycle(self.chart_colors), n))
          if overlay and n > 1:
              _, axis = plt.subplots(figsize=(width, height))
              if x_label is not None:
                  axis.set_xlabel(x_label)
              for label, color in zip(y_labels, colors):
                  draw(axis, label, color)
              if ticks is not None:
                  annotate(axis, ticks)
              axis.legend(y_labels, loc=2, bbox_to_anchor=(1.05, 1))
              type(self).plots.append(axis)
          else:
              fig, axes = plt.subplots(n, 1, figsize=(width, height*n))
              if not isinstance(axes, collections.Iterable):
                  axes=[axes]
              for axis, y_label, color in zip(axes, y_labels, colors):
                  draw(axis, y_label, color)
                  axis.set_ylabel(y_label, fontsize=16)
                  if x_label is not None:
                      axis.set_xlabel(x_label, fontsize=16)
                  if ticks is not None:
                      annotate(axis, ticks)
                  type(self).plots.append(axis)
docs: Generic visualization that overlays or separates the draw function.
  
          Raises:
              ValueError: The Table contains non-numerical values in columns
              other than `column_for_categories`