Use symbols as plot_type

This commit is contained in:
kojix2 2020-08-15 17:10:41 +09:00
parent ff1176797f
commit ee3608a106

View File

@ -4,8 +4,6 @@ require 'unicode_plot'
module Uplot module Uplot
class Command class Command
attr_accessor :params
Params = Struct.new( Params = Struct.new(
:title, :title,
:width, :width,
@ -31,10 +29,12 @@ module Uplot
end end
end end
attr_accessor :params, :plot_type
def initialize(argv) def initialize(argv)
@params = Params.new @params = Params.new
@ptype = nil @plot_type = nil
@headers = nil @headers = nil
@delimiter = "\t" @delimiter = "\t"
@transpose = false @transpose = false
@ -69,37 +69,37 @@ module Uplot
end end
def parse_options(argv) def parse_options(argv)
main_parser = create_parser main_parser = create_parser
parsers = Hash.new { |h, k| h[k] = create_parser } parsers = Hash.new { |h, k| h[k] = create_parser }
parsers['barplot'] = parsers['bar'] parsers[:barplot] = parsers[:bar]
.on('--symbol VAL', String) { |v| params.symbol = v } .on('--symbol VAL', String) { |v| params.symbol = v }
.on('--xscale VAL', String) { |v| params.xscale = v } .on('--xscale VAL', String) { |v| params.xscale = v }
.on('--count', TrueClass) { |v| @count = v } .on('--count', TrueClass) { |v| @count = v }
parsers['count'] = parsers['c'] # barplot -c parsers[:count] = parsers[:c] # barplot -c
.on('--symbol VAL', String) { |v| params.symbol = v } .on('--symbol VAL', String) { |v| params.symbol = v }
parsers['histogram'] = parsers['hist'] parsers[:histogram] = parsers[:hist]
.on('-n', '--nbins VAL', Numeric) { |v| params.nbins = v } .on('-n', '--nbins VAL', Numeric) { |v| params.nbins = v }
.on('--closed VAL', String) { |v| params.closed = v } .on('--closed VAL', String) { |v| params.closed = v }
.on('--symbol VAL', String) { |v| params.symbol = v } .on('--symbol VAL', String) { |v| params.symbol = v }
parsers['lineplot'] = parsers['line'] parsers[:lineplot] = parsers[:line]
.on('--canvas VAL', String) { |v| params.canvas = v } .on('--canvas VAL', String) { |v| params.canvas = v }
.on('--xlim VAL', String) { |v| params.xlim = get_lim(v) } .on('--xlim VAL', String) { |v| params.xlim = get_lim(v) }
.on('--ylim VAL', String) { |v| params.ylim = get_lim(v) } .on('--ylim VAL', String) { |v| params.ylim = get_lim(v) }
parsers['lineplots'] = parsers['lines'] parsers[:lineplots] = parsers[:lines]
.on('--canvas VAL', String) { |v| params.canvas = v } .on('--canvas VAL', String) { |v| params.canvas = v }
.on('--xlim VAL', String) { |v| params.xlim = get_lim(v) } .on('--xlim VAL', String) { |v| params.xlim = get_lim(v) }
.on('--ylim VAL', String) { |v| params.ylim = get_lim(v) } .on('--ylim VAL', String) { |v| params.ylim = get_lim(v) }
parsers['scatter'] = parsers['s'] parsers[:scatter] = parsers[:s]
.on('--canvas VAL', String) { |v| params.canvas = v } .on('--canvas VAL', String) { |v| params.canvas = v }
.on('--xlim VAL', String) { |v| params.xlim = get_lim(v) } .on('--xlim VAL', String) { |v| params.xlim = get_lim(v) }
.on('--ylim VAL', String) { |v| params.ylim = get_lim(v) } .on('--ylim VAL', String) { |v| params.ylim = get_lim(v) }
parsers['density'] = parsers['d'] parsers[:density] = parsers[:d]
.on('--grid', TrueClass) { |v| params.grid = v } .on('--grid', TrueClass) { |v| params.grid = v }
.on('--xlim VAL', String) { |v| params.xlim = get_lim(v) } .on('--xlim VAL', String) { |v| params.xlim = get_lim(v) }
.on('--ylim VAL', String) { |v| params.ylim = get_lim(v) } .on('--ylim VAL', String) { |v| params.ylim = get_lim(v) }
parsers['boxplot'] = parsers['box'] parsers[:boxplot] = parsers[:box]
.on('--xlim VAL', String) { |v| params.xlim = get_lim(v) } .on('--xlim VAL', String) { |v| params.xlim = get_lim(v) }
parsers.default = nil parsers.default = nil
main_parser.banner = <<~MSG main_parser.banner = <<~MSG
Program: uplot (Tools for plotting on the terminal) Program: uplot (Tools for plotting on the terminal)
@ -119,17 +119,17 @@ module Uplot
exit 1 exit 1
end end
@ptype = argv.shift @plot_type = argv.shift&.to_sym
unless parsers.has_key?(@ptype) unless parsers.has_key?(plot_type)
if @ptype.nil? if plot_type.nil?
warn main_parser.help warn main_parser.help
else else
warn "uplot: unrecognized command '#{@ptype}'" warn "uplot: unrecognized command '#{plot_type}'"
end end
exit 1 exit 1
end end
parser = parsers[@ptype] parser = parsers[plot_type]
begin begin
parser.parse!(argv) unless argv.empty? parser.parse!(argv) unless argv.empty?
@ -145,24 +145,26 @@ module Uplot
input.freeze input.freeze
data, headers = preprocess(input) data, headers = preprocess(input)
pp input: input, data: data, headers: headers if @debug pp input: input, data: data, headers: headers if @debug
case @ptype case plot_type
when 'bar', 'barplot' when :bar, :barplot
barplot(data, headers) barplot(data, headers)
when 'count', 'c' when :count, :c
@count = true @count = true
barplot(data, headers) barplot(data, headers)
when 'hist', 'histogram' when :hist, :histogram
histogram(data, headers) histogram(data, headers)
when 'line', 'lineplot' when :line, :lineplot
line(data, headers) line(data, headers)
when 'lines', 'lineplots' when :lines, :lineplots
lines(data, headers) lines(data, headers)
when 'scatter', 'scatterplot' when :scatter, :scatterplot
scatter(data, headers) scatter(data, headers)
when 'density' when :density
density(data, headers) density(data, headers)
when 'box', 'boxplot' when :box, :boxplot
boxplot(data, headers) boxplot(data, headers)
else
raise "unrecognized plot_type: #{plot_type}"
end.render($stderr) end.render($stderr)
print input if @output print input if @output