code: def fit_shown_data(f="a*x+b", p="a=1, b=2", axes="gca", verbose=True, **kwargs):
      
  
      # 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
docs: 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()