Sha256: 1d34c6624dc71afa36e36283d69378eef600b8175fed8d8abef2e5895378ee06

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true

module Gruff
  class Store
    class XYData < Struct.new(:label, :y_points, :color, :x_points)
      def initialize(label, y_points, color, x_points = nil)
        self.label = label.to_s
        self.y_points = Array(y_points)
        self.color = color
        self.x_points = Array(x_points) if x_points
      end

      def x_points
        self[:x_points] || Array.new(y_points.length)
      end

      def coordinates
        x_points.zip(y_points)
      end

      def columns
        y_points.length
      end

      def min
        y_points.compact.min
      end
      alias min_y min

      def max
        y_points.compact.max
      end
      alias max_y max

      def min_x
        x_points.compact.min
      end

      def max_x
        x_points.compact.max
      end

      def normalize(args = {})
        norm_x_points = x_points.map do |x|
          x.nil? ? nil : (x.to_f - args[:minimum_x].to_f) / args[:spread_x]
        end
        norm_y_points = y_points.map do |y|
          y.nil? ? nil : (y.to_f - args[:minimum_y].to_f) / args[:spread_y]
        end

        self.class.new(label, norm_y_points, color, norm_x_points)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gruff-0.10.0 lib/gruff/store/xy_data.rb
gruff-0.10.0-java lib/gruff/store/xy_data.rb