module GnuplotRB::Plottable

This module contains methods that should be mixed into plottable classes. It includes OptionHandling and implements several plotting methods.

Public Instance Methods

method_missing(meth_id, *args) click to toggle source

In this gem method_missing is used both to handle options and to handle plotting to specific terminal.

Options handling

Overview

You may set options using option_name(option_value) method. A new object will be constructed with selected option set. And finally you can get current value of any option using options_name without arguments.

Arguments

  • option_value - value to set an option. If none given method will just return current option's value

Examples

plot = Splot.new
new_plot = plot.title('Awesome plot')
plot.title #=> nil
new_plot.title #=> 'Awesome plot'

Plotting to specific term

Overview

Gnuplot offers possibility to output graphics to many image formats. The easiest way to to so is to use to_<plot_name> methods.

Arguments

  • options - set of options related to terminal (size, font etc). Be careful, some terminals have their own specific options.

Examples

# font options specific for png term
multiplot.to_png('./result.png', size: [300, 500], font: ['arial', 12])
# font options specific for svg term
content = multiplot.to_svg(size: [100, 100], fname: 'Arial', fsize: 12)
Calls superclass method
# File lib/gnuplotrb/mixins/plottable.rb, line 47
def method_missing(meth_id, *args)
  meth = meth_id.id2name
  case
  when meth[0..2] == 'to_'
    term = meth[3..-1]
    super unless OptionHandling.valid_terminal?(term)
    to_specific_term(term, *args)
  when meth[-1] == '!'
    option!(meth[0..-2].to_sym, *args)
  when meth[-1] == '='
    option!(meth[0..-2].to_sym, *args)
    option(meth[0..-2].to_sym)
  else
    option(meth_id, *args)
  end
end
own_terminal() click to toggle source

@return [Terminal] terminal object linked with this Plottable object

# File lib/gnuplotrb/mixins/plottable.rb, line 123
def own_terminal
  @terminal ||= Terminal.new
end
plot(*_) click to toggle source

@private You should implement plot in classes that are Plottable

# File lib/gnuplotrb/mixins/plottable.rb, line 12
def plot(*_)
  fail NotImplementedError, 'You should implement #plot in classes that are Plottable!'
end
respond_to?(meth_id, include_all=false) click to toggle source

@return [true] for existing methods and

#to_|term_name| when name is a valid terminal type.

@return [false] otherwise

Calls superclass method
# File lib/gnuplotrb/mixins/plottable.rb, line 68
def respond_to?(meth_id, include_all=false)
  # Next line is here to force iRuby use #to_iruby
  # instead of #to_svg.
  return super if defined? IRuby
  meth = meth_id.id2name
  term = meth[0..2] == 'to_' && OptionHandling.valid_terminal?(meth[3..-1])
  term || super
end
to_iruby() click to toggle source

This method is used to embed plottable objects into iRuby notebooks. There is a notebook with examples of its usage.

# File lib/gnuplotrb/mixins/plottable.rb, line 81
def to_iruby
  available_terminals = {
    'png'      => 'image/png',
    'pngcairo' => 'image/png',
    'jpeg'     => 'image/jpeg',
    'svg'      => 'image/svg+xml',
    'dumb'     => 'text/plain'
  }
  terminal, options = term.is_a?(Array) ? [term[0], term[1]] : [term, {}]
  terminal = 'svg' unless available_terminals.keys.include?(terminal)
  [available_terminals[terminal], send("to_#{terminal}".to_sym, **options)]
end
to_specific_term(terminal, path = nil, **options) click to toggle source

@private Output plot to specific terminal (possibly some file). Explicit use should be avoided. This method is called from method_missing when it handles method names like to_png(options).

@param trminal [String] terminal name ('png', 'svg' etc) @param path [String] path to output file, if none given it will output to temp file

and then read it and return binary contents of file

@param options [Hash] used in plot @example

## plot here may be Plot, Splot, Multiplot or any other plottable class
plot.to_png('./result.png', size: [300, 500])
contents = plot.to_svg(size: [100, 100])
plot.to_dumb('./result.txt', size: [30, 15])
# File lib/gnuplotrb/mixins/plottable.rb, line 109
def to_specific_term(terminal, path = nil, **options)
  if path
    result = plot(term: [terminal, options], output: path)
  else
    path = Dir.gnuplot_tmpname(terminal)
    plot(term: [terminal, options], output: path)
    result = File.binread(path)
    File.delete(path)
  end
  result
end