Plotting Graphs + Bestfit lines

Peter Otten __peter__ at web.de
Fri Jun 13 10:43:00 CEST 2008


arslanburney at gmail.com wrote:

>> > Still confused though i get the instance part ur trying to tell me.

> Tried that out too. No error however, best fit lines still not being
> made on the graph. Only the 3 plot lines show up.

Gave it another shot. You might want something like

from __future__ import division
import Gnuplot

def bestfit(uinput, **kw):
    sigmax = sigmay = sigmaxy = sigmaxsq = 0

    for x, y in uinput:
        sigmax += x
        sigmay += y
        sigmaxy += x * y
        sigmaxsq += x * x

    n = len(uinput)
    sigmaxwhl = sigmax * sigmax
    sigmaxsigmay = sigmax * sigmay
    num = sigmaxsigmay - n * sigmaxy
    den = sigmaxwhl - n * sigmaxsq
    num2 = sigmax * sigmaxy - sigmay * sigmaxsq


    gradient = num / den
    intercept = num2 / den

    return Gnuplot.Func('%f * x+%f' % (gradient, intercept), **kw)

def plot(original, expected, actual):
    gp = Gnuplot.Gnuplot()
    gp('set data style lines')

    # Make the plot items
    plot1 = Gnuplot.PlotItems.Data(original, title="Original")
    plot2 = Gnuplot.PlotItems.Data(expected, title="Expected")
    plot3 = Gnuplot.PlotItems.Data(actual, title="Actual")
    bf2 = bestfit(expected, title="Best fit expected")
    bf3 = bestfit(actual, title="Best fit actual")

    gp.plot(plot1, plot2, plot3, bf2, bf3)
    return gp


if __name__ == "__main__":
    gp = plot( [(2,3), (4,8), (5,9), (6,2)], [(1,7), (3,3), (4,5), (5,6)],
               [(1,3), (3,10), (4,8), (7,9) ] )
    raw_input()

It's all in one file for simplicity. Note that I did not check the best fit
algorithm, just tried to simplify what you already had. Use at your own
risk.

Peter



More information about the Python-list mailing list