def fit_shown_data(f="a*x+b", p="a=1, b=2", axes="gca", verbose=True, **kwargs):
    """
    Fast-and-loos quick fit:

    Loops over each line of the supplied axes and fits with the supplied
    function (f) and parameters (p). Assumes uniform error and scales this
    such that the reduced chi^2 is 1.

    Returns a list of fitter objects

    **kwargs are sent to _s.data.fitter()
    """

    # get the axes
    if axes=="gca": axes = _pylab.gca()

    # get the range for trimming
    _pylab.sca(axes)
    xmin,xmax = axes.get_xlim()
    ymin,ymax = axes.get_ylim()

    # update the kwargs
    if 'first_figure' not in kwargs: kwargs['first_figure'] = axes.figure.number+1

    # loop over the lines
    fitters = []
    for l in axes.lines:

        # get the trimmed data
        x,y = l.get_data()
        x,y = _s.fun.trim_data_uber([x,y],[xmin<x,x<xmax,ymin<y,y<ymax])

        # create a fitter
        fitters.append(_s.data.fitter(**kwargs).set_functions(f=f, p=p))
        fitters[-1].set_data(x,y)
        fitters[-1].fit()
        fitters[-1].autoscale_eydata().fit()
        if verbose:
            print(fitters[-1])
            print("<click the graph to continue>")
        if not axes.lines[-1] == l: fitters[-1].ginput(timeout=0)

    return fitters
Fast-and-loos quick fit:

    Loops over each line of the supplied axes and fits with the supplied
    function (f) and parameters (p). Assumes uniform error and scales this
    such that the reduced chi^2 is 1.

    Returns a list of fitter objects

    **kwargs are sent to _s.data.fitter()