Class: Gruff::Line
Overview
Constant Summary
Constants inherited from Base
Base::DATA_COLOR_INDEX, Base::DATA_LABEL_INDEX, Base::DATA_VALUES_INDEX, Base::DEBUG, Base::DEFAULT_TARGET_WIDTH, Base::LEGEND_MARGIN
Instance Attribute Summary collapse
-
#baseline_color ⇒ Object
Color of the baseline.
-
#baseline_value ⇒ Object
Draw a dashed line at the given value.
-
#hide_dots ⇒ Object
Hide parts of the graph to fit more datapoints, or for a different appearance.
-
#hide_lines ⇒ Object
Hide parts of the graph to fit more datapoints, or for a different appearance.
Attributes inherited from Base
#additional_line_values, #bottom_margin, #center_labels_over_point, #colors, #font, #font_color, #has_left_labels, #hide_legend, #hide_line_markers, #hide_line_numbers, #hide_title, #labels, #left_margin, #legend_box_size, #legend_font_size, #marker_color, #marker_count, #marker_font_size, #maximum_value, #minimum_value, #no_data_message, #right_margin, #sort, #stacked, #title, #title_font_size, #top_margin, #x_axis_label, #y_axis_increment, #y_axis_label
Instance Method Summary collapse
- #draw ⇒ Object
-
#initialize(*args) ⇒ Line
constructor
Call with target pixel width of graph (800, 400, 300), and/or ‘false’ to omit lines (points only).
- #normalize ⇒ Object
Methods inherited from Base
#add_color, #data, #initialize_ivars, #margins=, #replace_colors, #theme=, #theme_37signals, #theme_greyscale, #theme_keynote, #theme_odeo, #theme_pastel, #theme_rails_keynote, #to_blob, #write
Methods included from Deprecated
#graph_height, #graph_left, #graph_top, #graph_width, #scale_measurements, #total_height
Constructor Details
#initialize(*args) ⇒ Line
Call with target pixel width of graph (800, 400, 300), and/or ‘false’ to omit lines (points only).
g = Gruff::Line.new(400) # 400px wide with lines
g = Gruff::Line.new(400, false) # 400px wide, no lines (for backwards compatibility)
g = Gruff::Line.new(false) # Defaults to 800px wide, no lines (for backwards compatibility)
The preferred way is to call hide_dots or hide_lines instead.
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/gruff/line.rb', line 35 def initialize(*args) raise ArgumentError, "Wrong number of arguments" if args.length > 2 if args.empty? or ((not Numeric === args.first) && (not String === args.first)) then super() else super args.shift end @hide_dots = @hide_lines = false @baseline_color = 'red' @baseline_value = nil end |
Instance Attribute Details
#baseline_color ⇒ Object
Color of the baseline
21 22 23 |
# File 'lib/gruff/line.rb', line 21 def baseline_color @baseline_color end |
#baseline_value ⇒ Object
Draw a dashed line at the given value
18 19 20 |
# File 'lib/gruff/line.rb', line 18 def baseline_value @baseline_value end |
#hide_dots ⇒ Object
Hide parts of the graph to fit more datapoints, or for a different appearance.
24 25 26 |
# File 'lib/gruff/line.rb', line 24 def hide_dots @hide_dots end |
#hide_lines ⇒ Object
Hide parts of the graph to fit more datapoints, or for a different appearance.
24 25 26 |
# File 'lib/gruff/line.rb', line 24 def hide_lines @hide_lines end |
Instance Method Details
#draw ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/gruff/line.rb', line 48 def draw super return unless @has_data # Check to see if more than one datapoint was given. NaN can result otherwise. @x_increment = (@column_count > 1) ? (@graph_width / (@column_count - 1).to_f) : @graph_width if (defined?(@norm_baseline)) then level = @graph_top + (@graph_height - @norm_baseline * @graph_height) @d = @d.push @d.stroke_color @baseline_color @d.fill_opacity 0.0 @d.stroke_dasharray(10, 20) @d.stroke_width 5 @d.line(@graph_left, level, @graph_left + @graph_width, level) @d = @d.pop end @norm_data.each do |data_row| prev_x = prev_y = nil data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index| new_x = @graph_left + (@x_increment * index) next if data_point.nil? draw_label(new_x, index) new_y = @graph_top + (@graph_height - data_point * @graph_height) # Reset each time to avoid thin-line errors @d = @d.stroke data_row[DATA_COLOR_INDEX] @d = @d.fill data_row[DATA_COLOR_INDEX] @d = @d.stroke_opacity 1.0 @d = @d.stroke_width clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 4), 5.0) if !@hide_lines and !prev_x.nil? and !prev_y.nil? then @d = @d.line(prev_x, prev_y, new_x, new_y) end circle_radius = clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 2.5), 5.0) @d = @d.circle(new_x, new_y, new_x - circle_radius, new_y) unless @hide_dots prev_x = new_x prev_y = new_y end end @d.draw(@base_image) end |
#normalize ⇒ Object
99 100 101 102 103 |
# File 'lib/gruff/line.rb', line 99 def normalize @maximum_value = [@maximum_value.to_f, @baseline_value.to_f].max super @norm_baseline = (@baseline_value.to_f / @maximum_value.to_f) if @baseline_value end |