docs: def points(ys, width=None):
      '''Usage:
      import scipy.stats
      def walk(steps, position=0):
          for step in steps:
              position += step
              yield position
      positions = list(walk(scipy.stats.norm.rvs(size=1000)))
      points(positions)
      '''
      if width is None:
          width = terminal.width()
  
      ys = np.array(ys)
      n = len(ys)
      y_min, y_max = np.min(ys), np.max(ys)
      n_bins = min(width, n)
      bins_per_n = float(n_bins) / float(n)
      # print n, n_bins, n_per_bin, bins_per_n
      sums = np.zeros(n_bins)
      counts = np.zeros(n_bins)
      for i, y in enumerate(ys):
          bin = int(i * bins_per_n)
          sums[bin] += y
          counts[bin] += 1
      bin_means = sums / counts
      # we want the lowest bin_height to be 0.0, and highest bin_height to be 1.0
      bin_heights = normalize(bin_means)
      bin_chars = (bin_heights * (len(terminal.bars) - 1)).astype(int)
      # print sums, counts, bin_means
      cells = [terminal.bars[bin_char] for bin_char in bin_chars]
      print '[%+f]' % y_max
      print u''.join(cells)
      print '[%+f]' % y_min