need some advice on x y plot

Grant Edwards grante at visi.com
Fri Oct 21 15:04:16 EDT 2005


On 2005-10-21, nephish at xit.net <nephish at xit.net> wrote:

> the time is DateTime.DateTime object from a mySQLdb query. the
> value is a number anywhere between 0 and 15. the datetime is
> formatted like 2005-10-20 08:40:34
>
> i could strip it and make a timestamp out of it. but reading
> the number of seconds since january of 1970 doesn't make a
> neat chart.

Pass the data values as floating point numbers (I typically use
seconds since the test run started).  If you the x tics to be
something else, then change them.  It's pretty simple to label
the x-axis using normal date/time notation.

> any suggestions?
>
> oh, and can you output from Gnuplot to a png or jpeg or
> something like that.

Is that a question? If so, the answer is yes.

> the Gnuplot documentation says that it can make a bitmap png
> but i dont know how to do that with the python wrapper. the
> docs for this are a little cryptic. still a newbie here. if
> you know a good tutorial on this, i would really appreciate
> the link.

Once you start doing "odd" stuff (e.g. custom labels for the x-axis,
output other than X11 or postscript), it's usually simplest to
just send normal gnuplot commands.

------------------------------8<------------------------------
import Gnuplot,time,sys,math

def pause():
    sys.stdout.write("Press enter to continue: ")
    sys.stdin.readline()

def fgrid(start,stop,count):
    for i in xrange(count):
        yield start + ((stop-start)*i)/count

start = time.time()

xdata = [x for x in fgrid(0,600.0,10)]      # two minutes worth
ydata = [math.sin(x/100.0) for x in xdata]

data = Gnuplot.Data(xdata,ydata,with='linespoints')

gp = Gnuplot.Gnuplot()
gp.title('Data starting at %s' % time.ctime(start+xdata[0]))

# x axis will use default tics (seconds since start of run)
gp.plot(data)
pause()

# now let's change x tics to time of day in HH:MM:SS with
# ticmarks at 120 second intervals

ti = 120.0
startTic = int((start+xdata[0])//ti * ti)
endTic = int((start+xdata[-1])//ti * ti)
ti = int(ti)

ticx = range(startTic,endTic+ti,ti)
tics = [(x, time.strftime('%H:%M:%S',time.localtime(x))) for x in ticx]
ticstrings = ['"%s" %f' % (t[1],t[0]-start) for t in tics]

gp('set xtics (%s)' % ','.join(ticstrings))
gp.plot(data)
pause()

outfile = 'foo.png'
gp('set term png')
gp('set out "%s"' % outfile)
gp.plot(data)
------------------------------8<------------------------------

-- 
Grant Edwards                   grante             Yow!  ... The waitress's
                                  at               UNIFORM sheds TARTAR SAUCE
                               visi.com            like an 8" by 10" GLOSSY...



More information about the Python-list mailing list