Class: Gruff::Line
Constant Summary
Constants inherited from Base
Base::DATA_COLOR_INDEX, Base::DATA_LABEL_INDEX, Base::DATA_VALUES_INDEX, Base::DEBUG, Base::LEGEND_MARGIN, Base::TOP_MARGIN
Constants included from Magick
Magick::BoldWeight, Magick::CenterGravity, Magick::EastGravity, Magick::NormalWeight, Magick::NorthEastGravity, Magick::NorthGravity, Magick::NorthWestGravity, Magick::SouthEastGravity, Magick::SouthGravity, Magick::SouthWestGravity, Magick::WestGravity
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, #colors, #font, #hide_legend, #hide_line_markers, #hide_title, #labels, #legend_font_size, #marker_color, #marker_count, #marker_font_size, #maximum_value, #minimum_value, #no_data_message, #stacked, #title, #title_font_size, #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).
- #max(a, b) ⇒ Object
- #normalize ⇒ Object
Methods inherited from Base
#add_color, #data, #replace_colors, #theme=, #theme_37signals, #theme_keynote, #theme_odeo, #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.
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/gruff/line.rb', line 24 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' end |
Instance Attribute Details
#baseline_color ⇒ Object
Color of the baseline
10 11 12 |
# File 'lib/gruff/line.rb', line 10 def baseline_color @baseline_color end |
#baseline_value ⇒ Object
Draw a dashed line at the given value
7 8 9 |
# File 'lib/gruff/line.rb', line 7 def baseline_value @baseline_value end |
#hide_dots ⇒ Object
Hide parts of the graph to fit more datapoints, or for a different appearance.
13 14 15 |
# File 'lib/gruff/line.rb', line 13 def hide_dots @hide_dots end |
#hide_lines ⇒ Object
Hide parts of the graph to fit more datapoints, or for a different appearance.
13 14 15 |
# File 'lib/gruff/line.rb', line 13 def hide_lines @hide_lines end |
Instance Method Details
#draw ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 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 |
# File 'lib/gruff/line.rb', line 36 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 circle_radius = clip_value_if_greater_than(@columns / (@norm_data.first[1].size * 2.5), 5.0) @d = @d.stroke_opacity 1.0 @d = @d.stroke_width clip_value_if_greater_than(@columns / (@norm_data.first[1].size * 4), 5.0) 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 @d = @d.stroke data_row[DATA_COLOR_INDEX] @d = @d.fill data_row[DATA_COLOR_INDEX] data_row[1].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) if !@hide_lines and !prev_x.nil? and !prev_y.nil? then @d = @d.line(prev_x, prev_y, new_x, new_y) end @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 |
#max(a, b) ⇒ Object
93 94 95 |
# File 'lib/gruff/line.rb', line 93 def max(a, b) (a < b ? b : a) end |
#normalize ⇒ Object
87 88 89 90 91 |
# File 'lib/gruff/line.rb', line 87 def normalize @maximum_value = max(@maximum_value.to_f, @baseline_value.to_f) super @norm_baseline = (@baseline_value.to_f / @maximum_value.to_f) if @baseline_value end |