Follow-up posts

I did much more work on this: Gnuplot for numpy. For real this time

I've been using PDL for numerical computation. It works ok, but is crufty and incomplete in many ways. I'm thus starting to look at numpy as an alternative, as much as I hate switching languages. Such transitions are full of dealing with people's NIH ambitions, and one has to pick one's battles. One battle I refuse to concede is switching away to numpy's preferred NIH plotting system: matplotlib. I've been using gnuplot for something like 20 years at this point, and I'm not moving.

Python land appears to have a reasonably functional gnuplot interface:
`gnuplot.py`

. It works, but is very clunky to use with numpy. So I wrote
`python_gplot`

, a wrapper around `gnuplot.py`

that provides an interface very
similar to my original design for PDL::Graphics::Gnuplot. Examples (ASCII plots
just as a demo):

dima@shorty:~/projects/python_gplot$ cat test.py #!/usr/bin/python2 from numpy import * from gplot import * x = arange(100) y = x ** 2 gplot( x,y, cmd="set terminal dumb" ) g2 = python_gplot("set terminal dumb") g2.plot({'with': 'lines'}, y, x) g2.plot( (x-100, y), ({'with': 'lines'}, -x,y) ) dima@shorty:~/projects/python_gplot$ ./test.py 100.000 +-+----+-----+------+-----+------+------+-----+------+-----+----+-+ + + + + + + + + + ++++++ + 90.000 +-+ ++++-++ +-+ | ++-+++ | 80.000 +-+ +++++ +-+ | +++++ | 70.000 +-+ +++++ +-+ | ++++ | 60.000 +-+ ++++ +-+ 50.000 +-+ ++++ +-+ | ++++ | 40.000 +-+ +++ +-+ | +++ | 30.000 +-+ +++ +-+ | ++ | 20.000 +-++ +-+ |++ | 10.000 +-+ +-+ + + + + + + + + + + + 0.000 +-+----+-----+------+-----+------+------+-----+------+-----+----+-+ 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 10000.000 +-+----------+------------+-----------+------------+----------+A+ ++++ + + + + AAA+ 9000.000 +-+++ AA+-+ | +++ AAA | 8000.000 +-+ +++ AAA +-+ | +++ AAA | 7000.000 +-+ +++ AAA +-+ | +++ AAA | 6000.000 +-+ ++ AA +-+ 5000.000 +-+ +++ AAA +-+ | +++ AAA | 4000.000 +-+ +++ AAA +-+ | +++ AAA | 3000.000 +-+ +++ AAA +-+ | +AAAA | 2000.000 +-+ AAAA ++++ +-+ | AAAA ++++ | 1000.000 +-+ AAAAA +++++ +-+ + AAAAAAAA + + ++++++++ + 0.000 AAAAAAAAAAA--+------------+-----------+------------+----------+-+ -100 -80 -60 -40 -20 0 10000.000 +-+---+------+-----+------+-----+-----+------+-----+------+---+A+ + + + + + + + + + + AAA+ 9000.000 +-+ AA+-+ | AAA | 8000.000 +-+ AAA +-+ | AAA | 7000.000 +-+ AAA +-+ | AAA | 6000.000 +-+ AA +-+ 5000.000 +-+ AAA +-+ | AAA | 4000.000 +-+ AAA +-+ | AAA | 3000.000 +-+ AAA +-+ | AAAA | 2000.000 +-+ AAAA +-+ | AAAA | 1000.000 +-+ AAAAA +-+ + + AAAAAAAA+ + + + + + + + 0.000 AAAAAAAAAAA--+-----+------+-----+-----+------+-----+------+---+-+ 0 10 20 30 40 50 60 70 80 90 100

## Brief description

Here you can plot into a global `gnuplot`

instance using the `gplot()`

function.
Or you can create a new instance by instantiating `class python_gplot`

. In
either case, you can pass in plot parameters for a single set of data *or* a
tuple of such parameters if we want to plot multiple pieces of data on the same
plot.

Each set of plot parameters is a list that's an `ndarray`

of `y`

values or `x`

,
`y`

. Optionally, the first element of this list can be a `dict`

that's passed to
`gnuplot.py`

unmodified.

Lastly, arbitrary `gnuplot`

commands can be given with

```
gplot( ...., cmd="gnuplot command!!!")
```

or in a constructor:

g = python_gplot("gnuplot command!!!")

## Explained examples

Let's say you have two `ndarray`

objects: `x`

and `y`

.

In its most simple form you can plot `y`

versus `x`

:

gplot( x,y )

If you want to pick a different terminal, say:

```
gplot( x,y, cmd="set terminal dumb" )
```

If you just want to plot `y`

against integers, it's even simpler:

gplot( y )

If you want to make such a plot but with points *and* lines:

gplot( {'with': 'linespoints'}, y )

If you want to plot two curves on the same plot:

gplot( (x,y), ({'with': 'linespoints'}, y,x) )

## Bugs

This is an extremely early alpha. I think it works, but haven't used it very much yet. I'll improve this as I need features. 3D plotting will happen at some point (maybe it works already). Also, this is my first python effort, and the code quality will improve. Documentation is extremely lacking right now. This will likewise improve as I use this.

## License

Copyright 2015, Dima Kogan. Distributed under the terms of GNU LGPL, like
`gnuplot.py`