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)

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