class Nyaplot::Plot

Jsonizable Object to which diagrams are registered Properties of Nyaplot::Plot are embeded into the JSON object as a part of property ‘panes’ by Nyaplot::Frame

Public Class Methods

new() { || ... } click to toggle source
# File lib/nyaplot/plot.rb, line 44
def initialize(&block)
  init_properties
  set_property(:diagrams, [])
  set_property(:options, {})
  set_property(:width, nil)
  set_property(:legend, nil)
  set_property(:zoom, nil)

  yield if block_given?
end

Public Instance Methods

add(type, *data) click to toggle source

Add diagram with Array @param [Symbol] type the type of diagram to add @param [Array<Array>] *data array from which diagram is created @example

plot.add(:scatter, [0,1,2], [0,1,2])
# File lib/nyaplot/plot.rb, line 60
def add(type, *data)
  labels = data.map.with_index{|d, i| 'data' + i.to_s}
  raw_data = data.each.with_index.reduce({}){|memo, (d, i)| memo[labels[i]]=d; next memo}
  df = DataFrame.new(raw_data)
  return add_with_df(df, type, *labels)
end
add_with_df(df, type, *labels) click to toggle source

Add diagram with DataFrame @param [DataFrame] DataFrame from which diagram is created @param [Symbol] type the type of diagram to add @param [Array<Symbol>] *labels column labels for x, y or some other dimension @example

df = Nyaplot::DataFrame.new({x: [0,1,2], y: [0,1,2]})
plot.add(df, :scatter, :x, :y)
# File lib/nyaplot/plot.rb, line 74
def add_with_df(df, type, *labels)
  diagram = Diagram.new(df, type, labels)
  diagrams = get_property(:diagrams)
  diagrams.push(diagram)
  return diagram
end
before_to_json() click to toggle source
# File lib/nyaplot/plot.rb, line 107
def before_to_json
  diagrams = get_property(:diagrams)
  return if diagrams.length == 0

  # set default values when not specified by users
  zoom(true) if zoom.nil? && diagrams.all?{|d| d.zoom?}

  if width.nil?
    if legend == true
      width(800)
    else
      width(700)
    end
  end

  [:xrange, :yrange].each do |symbol|
    if get_property(:options)[symbol].nil?
      range = []
      diagrams.each{|diagram| range.push(diagram.send(symbol))}

      if range.all? {|r| r.length == 2} # continuous data
        range = range.transpose
        range = [range[0].min, range[1].max]
        self.send(symbol, range)
      else # discrete data
        range.flatten!.uniq!
        self.send(symbol, range)
      end
    end
  end
end
configure(&block) click to toggle source

Shortcut method to configure plot @example

plot = Nyaplot::Plot.new
plot.configure do
  width(700)
  height(700)
end
# File lib/nyaplot/plot.rb, line 146
def configure(&block)
  self.instance_eval(&block) if block_given?
end
df_list() click to toggle source

@return [Array<String>] names of dataframe used by diagrams belog to this plot

# File lib/nyaplot/plot.rb, line 100
def df_list
  arr=[]
  diagrams = get_property(:diagrams)
  diagrams.each{|d| arr.push(d.df_name)}
  return arr
end
export_html(path=nil) click to toggle source

export html file

# File lib/nyaplot/plot.rb, line 93
def export_html(path=nil)
  require 'securerandom'
  path = "./plot-" + SecureRandom.uuid().to_s + ".html" if path.nil?
  Frame.new.tap {|f| f.add(self) }.export_html(path)
end
show() click to toggle source

Show plot on IRuby notebook

# File lib/nyaplot/plot.rb, line 88
def show
  Frame.new.tap {|f| f.add(self) }.show
end
to_iruby() click to toggle source

Show plot automatically on IRuby notebook

# File lib/nyaplot/plot.rb, line 83
def to_iruby
  Frame.new.tap {|f| f.add(self) }.to_iruby
end