From eabc36b581514bd7bbe51a3522ac932e7e10ffa5 Mon Sep 17 00:00:00 2001 From: kojix2 <2xijok@gmail.com> Date: Thu, 30 Jul 2020 16:33:08 +0900 Subject: [PATCH] Fix styles and more --- lib/uplot/command.rb | 49 +++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/lib/uplot/command.rb b/lib/uplot/command.rb index dcda6fc..b2512e1 100644 --- a/lib/uplot/command.rb +++ b/lib/uplot/command.rb @@ -12,33 +12,32 @@ module Uplot parse_options(argv) end - def opt_new - opt = OptionParser.new do |opt| - opt.on('-o', '--output', TrueClass) { |v| @output = v } + def create_parser + OptionParser.new do |opt| + opt.on('-o', '--output', TrueClass) { |v| @output = v } opt.on('-d', '--delimiter VAL', String) { |v| @delimiter = v } - opt.on('-H', '--headers', TrueClass) { |v| @headers = v } - opt.on('-t', '--title VAL', String) { |v| @params[:title] = v } - opt.on('-w', '--width VAL', Numeric) { |v| @params[:width] = v } - opt.on('-h', '--height VAL', Numeric) { |v| @params[:height] = v } - opt.on('-b', '--border VAL', Numeric) { |v| @params[:border] = v } - opt.on('-m', '--margin VAL', Numeric) { |v| @params[:margin] = v } - opt.on('-p', '--padding VAL', Numeric) { |v| @params[:padding] = v } - opt.on('-l', '--labels', TrueClass) { |v| @params[:labels] = v } + opt.on('-H', '--headers', TrueClass) { |v| @headers = v } + opt.on('-t', '--title VAL', String) { |v| @params[:title] = v } + opt.on('-w', '--width VAL', Numeric) { |v| @params[:width] = v } + opt.on('-h', '--height VAL', Numeric) { |v| @params[:height] = v } + opt.on('-b', '--border VAL', Numeric) { |v| @params[:border] = v } + opt.on('-m', '--margin VAL', Numeric) { |v| @params[:margin] = v } + opt.on('-p', '--padding VAL', Numeric) { |v| @params[:padding] = v } + opt.on('-l', '--labels', TrueClass) { |v| @params[:labels] = v } end end def parse_options(argv) - main_parser = opt_new - parsers = {} - parsers['hist'] = opt_new.on('--nbins VAL', Numeric) { |v| @params[:nbins] = v } + main_parser = create_parser + parsers = Hash.new { |h, k| h[k] = create_parser } + parsers['hist'] .on('--nbins VAL', Numeric) { |v| @params[:nbins] = v } parsers['histogram'] = parsers['hist'] - parsers['line'] = opt_new parsers['lineplot'] = parsers['line'] - parsers['lines'] = opt_new - parsers['scatter'] = opt_new + parsers['lineplots'] = parsers['lines'] parsers['scatterplot'] = parsers['scatter'] - parsers['bar'] = opt_new - parsers['barplot'] = parsers['bar'] + parsers['barplot'] = parsers['bar'] + parsers['boxplot'] = parsers['box'] + parsers.default = nil main_parser.banner = <<~MSG Usage:\tuplot [options] @@ -71,6 +70,8 @@ module Uplot scatter(data, headers) when 'bar', 'barplot' barplot(data, headers) + when 'box', 'boxplot' + boxplot(data, headers) end.render($stderr) print input if @output @@ -134,5 +135,15 @@ module Uplot end plot end + + def boxplot(data, headers) + headers ||= (1..data.size).to_a + data.map! { |series| series.map(&:to_f) } + plot = UnicodePlot.boxplot(headers[0], data[0], **@params.compact) + 1.upto(data.size - 1) do |i| + UnicodePlot.boxplot!(plot, headers[i], data[i]) + end + plot + end end end