GNUPlotr: an easy interface between Ruby and GNUPlot
Here's a quick example:
require "gnuplotr" # Instantiate gp = GNUPlotr.new # Create and fill a new series with pairs. This creates the parabola.dat file # Block-based way to do it: gp.fill_series(:parabola) do |series| (0..99).each do |i| series << [i, i**2] end end # conventional way: gp.new_series(:parabola_2) (0..99).each do |i| gp.series[:parabola_2] << [i, i**2] end gp.series[:parabola_2].close # Remember to call this! # enable command history recording gp.record = true # Issue raw gnuplot commands gp.raw "set grid" # Some magic mapping works too: gp.set_grid gp.set_title 'GNUPlotr example' gp.set_xlabel 'x', :offset => 3, :font => "Times New Roman,26" gp.set_ylabel "f(x)" gp.set_xrange [0:50] # issue plotting commands, either with named data series gp.plot :parabola, "using 1:2 with points axes x1y1" # or with formulas. Options are collected in a string passed as second optional argument gp.replot "x**2", "with lines" # command history can be dumper and possibly saved on file to be edited or loaded again later on. puts gp.dump_input
As usual, use the gem:
% [sudo] gem install gnuplotr
Needless to say, you probably have to install a GNUPlot version in order to use gnuplotr. At the moment, gnuplotr is not too smart in detecting your GNUPlot installation path: it simply assumes that you are on MAC OS X and that you installed it via port, so that the executable is on /opt/local/bin/gnuplot.
If that is not your case, you must specify GNUPlot path as argument when you instantiate gnuplotr:
gp = GNUPlotr.new("/path/to/your/gnuplot")
Please Note: on Mac OS X, it seems that GNUPlot fails plotting on AquaTerm the first time you use it. To overcome this problem, do like that:
- launch GNUPlot in Terminal and type some plotting command (e.g. plot sin(x)). Most probably nothing will happen.
- Manually launch AquaTerm (it is in Applications)
- Exit GNUPlot and launch it again, then try again to plot. Now it should work fine.
- From now on, gnuplotr should work fine too, and you even don't need to pre-launch AquaTerm (it will open automatically).