Enhances the gnuplot gem with a simple interface to multiplot functionality.
gem install gnuplot-multiplot
gnuplot-multiplot includes gnuplot as a dependency, so you get both if you install the multiplot gem.
require 'gnuplot/multiplot'
x = (0..50).collect { |v| v.to_f }
mult2 = x.map {|v| v * 2 }]
squares = x.map {|v| v * 4 }
Gnuplot.open do |gp|
Gnuplot::Multiplot.new(gp, layout: [2,1]) do |mp|
Gnuplot::Plot.new(mp) do |plot|
plot.data << Gnuplot::DataSet.new( [x, mult2] )
end
Gnuplot::Plot.new(mp) do |plot|
plot.data << Gnuplot::DataSet.new( [x, squares] )
end
end
end
Options for multiplot may also be passed in as a gnuplot-ready String:
Gnuplot::Multiplot.new(gp, %Q{layout 2,1 title "some title"}) do |mp|
...
end
title: String,
font: String (fontspec),
enhanced: true/false, # noenhanced if false
layout: [num_rows,num_cols],
rowsfirst: true/false, # columnsfirst if false
downwards: true/false, # upwards if false
scale: Float (xscale) || [Float (xscale), Float (yscale)],
offset: Float (xoffset) || [Float (xoffset), Float (yoffset)],
The gnuplot gem is very object oriented. Virtually no options are passed in using a hash, as done here with multiplot. To be consistent with the gnuplot gem the various properties of multiplot should probably be set as attributes similar to Gnuplot::DataSet. However, given how gnuplot is currently implemented, it would require several hacks to achieve (e.g., the first Plot called would need to prompt the multiplot object to issue its commands). This gem's interface, while not as consistent with the current gnuplot gem as one might like, is simple and minimally invasive. To build something more consistent with the current gnuplot interface would require a rewrite of gnuplot, IMHO.
It's not hard to pipe in your own commands for a multiplot (it's even uglier than this interface, of course), but you still have to alter the default behavior of Plot.new to add in the necessary newlines between plots. This gem takes care of those necessary newlines.
MIT License (see LICENSE)