need some advice on x y plot

Grant Edwards grante at visi.com
Tue Oct 25 17:52:00 CEST 2005


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

> Ok, first off, thanks for all the help guys,
>
> this part "set xtics ("label" pos, "label" pos, "label" pos)"
> is mainly what i was confused about. the 'pos' part. i think
> that the way i am writing this leaves this out. in fact, i am
> pretty sure.

Yup, it looks like it.

> here is the code i am trying out.

[Another hint: when posting code, don't wrap it.  It won't run
as it was posted, and people aren't generally going to be willing to go
through and un-wrap the lines in order to try it.]

> gnuplot> set title "testing"
> gnuplot> set term png
> gnuplot> set out "/home/piv/PivData/tmp/images/graph.png"
> gnuplot> set xtics (['10/18 09:54', '10/17 22:42', '10/17 11:30',
> '10/17 00:18', '10/16 13:06', '10/16 01:54', '10/15 14:42', '10/15
> 03:30', '10/14 16:18', '10/14 05:06', '10/13 17:54', '10/13 06:42',
> '10/12 19:30', '10/12 08:18', '10/25 09:54'])

OK, You need to get rid of the sqare brackets, and you need an
x-position value after each of the strings.

> i noticed in the docs for gnuplot, that it can do date/time
> and by default uses seconds since 2000. and then you can pass
> the format that you want to show it in. would this give the
> same kind of result that i am looking for ?

It looks like it.  Though I've used custom tics in the past, it
was never for time values.  Based on the help from gnuplot, I
suspect you can get what you want without doing custom tics,
but rather using the commands

   set xdata time
   set timefmt
   set format x

Interestingly, using Unix timestamps creates some sort of
resolution problems.  The following ought to work but doesn't.
It appears that there is some sort of resolution problem:

------------------------------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',using=(1,2))
gp = Gnuplot.Gnuplot(debug=1)
gp.title('Data starting at %s' % time.asctime(time.gmtime(start+xdata[0])))

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

# same data with x value as Unix timestamps

xdata = [x+start for x in xdata]
print xdata
data = Gnuplot.Data(xdata,ydata,with='linespoints',using=(1,2))

gp('set xdata time')
gp('set timefmt "%s')
gp('set format x "%r"')
gp('set xtics 120')
gp.plot(data)
pause()
------------------------------8<------------------------------

   
-- 
Grant Edwards                   grante             Yow!  LOOK!!! I'm WALKING
                                  at               in my SLEEP again!!
                               visi.com            



More information about the Python-list mailing list