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