Class: Gruff::Line

Inherits:
Base
  • Object
show all
Defined in:
lib/gruff/line.rb

Overview

Here's how to make a Gruff::Line.

g = Gruff::Line.new
g.title = "A Line Graph"
g.data 'Fries', [20, 23, 19, 8]
g.data 'Hamburgers', [50, 19, 99, 29]
g.write("line.png")

There are also other options described below, such as #baseline_value, #baseline_color, #hide_dots=, and #hide_lines=.

Constant Summary

Constants inherited from Base

Base::DEFAULT_MARGIN, Base::DEFAULT_TARGET_WIDTH, Base::LABEL_MARGIN, Base::LEGEND_MARGIN

Instance Attribute Summary collapse

Attributes inherited from Base

#bottom_margin, #colors, #hide_legend, #hide_line_markers, #hide_line_numbers, #hide_title, #label_max_size, #label_truncation_style, #left_margin, #legend_at_bottom, #legend_box_size, #legend_margin, #marker_color, #marker_shadow_color, #maximum_value, #minimum_value, #no_data_message, #right_margin, #sort, #sorted_drawing, #title_margin, #top_margin, #x_axis_increment, #x_axis_label_format, #y_axis_increment, #y_axis_label_format

Instance Method Summary collapse

Methods inherited from Base

#add_color, #bold_title=, #draw, #font=, #font_color=, #label_rotation=, #label_stagger_height=, #labels=, #legend_font_size=, #margins=, #marker_font_size=, #replace_colors, #theme=, #theme_37signals, #theme_greyscale, #theme_keynote, #theme_odeo, #theme_pastel, #theme_rails_keynote, #title=, #title_font=, #title_font_size=, #to_blob, #to_image, #write

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.

Raises:

  • (ArgumentError)

50
51
52
53
54
55
56
57
58
# File 'lib/gruff/line.rb', line 50

def initialize(*args)
  raise ArgumentError, 'Wrong number of arguments' if args.length > 2

  if args.empty? || (!args.first.is_a?(Numeric) && !args.first.is_a?(String))
    super()
  else
    super args.shift
  end
end

Instance Attribute Details

#dot_radius=(value) ⇒ Object (writeonly)

Sets the attribute dot_radius

Parameters:

  • value

    the value to set the attribute dot_radius to.


26
27
28
# File 'lib/gruff/line.rb', line 26

def dot_radius=(value)
  @dot_radius = value
end

#dot_style=(value) ⇒ Object (writeonly)

default is 'circle', other options include square and diamond.


29
30
31
# File 'lib/gruff/line.rb', line 29

def dot_style=(value)
  @dot_style = value
end

#hide_dots=(value) ⇒ Object (writeonly)

Hide parts of the graph to fit more data points, or for a different appearance.


32
33
34
# File 'lib/gruff/line.rb', line 32

def hide_dots=(value)
  @hide_dots = value
end

#hide_lines=(value) ⇒ Object (writeonly)

Hide parts of the graph to fit more data points, or for a different appearance.


32
33
34
# File 'lib/gruff/line.rb', line 32

def hide_lines=(value)
  @hide_lines = value
end

#line_width=(value) ⇒ Object (writeonly)

Dimensions of lines and dots; calculated based on dataset size if left unspecified.


25
26
27
# File 'lib/gruff/line.rb', line 25

def line_width=(value)
  @line_width = value
end

#marker_x_count=(value) ⇒ Object (writeonly)

The number of vertical lines shown.


41
42
43
# File 'lib/gruff/line.rb', line 41

def marker_x_count=(value)
  @marker_x_count = value
end

#maximum_x_value=(value) ⇒ Object (writeonly)

accessors for support of xy data.


38
39
40
# File 'lib/gruff/line.rb', line 38

def maximum_x_value=(value)
  @maximum_x_value = value
end

#minimum_x_value=(value) ⇒ Object (writeonly)

accessors for support of xy data.


35
36
37
# File 'lib/gruff/line.rb', line 35

def minimum_x_value=(value)
  @minimum_x_value = value
end

#reference_line_default_color=(value) ⇒ Object (writeonly)

Sets the attribute reference_line_default_color

Parameters:

  • value

    the value to set the attribute reference_line_default_color to.


18
19
20
# File 'lib/gruff/line.rb', line 18

def reference_line_default_color=(value)
  @reference_line_default_color = value
end

#reference_line_default_width=(value) ⇒ Object (writeonly)

Sets the attribute reference_line_default_width

Parameters:

  • value

    the value to set the attribute reference_line_default_width to.


19
20
21
# File 'lib/gruff/line.rb', line 19

def reference_line_default_width=(value)
  @reference_line_default_width = value
end

#reference_linesObject

Allow for reference lines ( which are like baseline … just allowing for more & on both axes ).


17
18
19
# File 'lib/gruff/line.rb', line 17

def reference_lines
  @reference_lines
end

#show_vertical_markers=(value) ⇒ Object (writeonly)

Allow for vertical marker lines.


22
23
24
# File 'lib/gruff/line.rb', line 22

def show_vertical_markers=(value)
  @show_vertical_markers = value
end

Instance Method Details

#baseline_colorObject


73
74
75
76
77
# File 'lib/gruff/line.rb', line 73

def baseline_color
  if @reference_lines.key?(:baseline)
    @reference_lines[:baseline][:color]
  end
end

#baseline_color=(new_value) ⇒ Object


79
80
81
82
# File 'lib/gruff/line.rb', line 79

def baseline_color=(new_value)
  @reference_lines[:baseline] ||= {}
  @reference_lines[:baseline][:color] = new_value
end

#baseline_valueObject

Get the value if somebody has defined it.


61
62
63
64
65
# File 'lib/gruff/line.rb', line 61

def baseline_value
  if @reference_lines.key?(:baseline)
    @reference_lines[:baseline][:value]
  end
end

#baseline_value=(new_value) ⇒ Object

Set a value for a baseline reference line..


68
69
70
71
# File 'lib/gruff/line.rb', line 68

def baseline_value=(new_value)
  @reference_lines[:baseline] ||= {}
  @reference_lines[:baseline][:value] = new_value
end

#data(name, data_points = [], color = nil) ⇒ Object

Note:

If you want to use a preset theme, you must set it before calling #data.

Input the data in the graph.

Parameters are an array where the first element is the name of the dataset and the value is an array of values to plot.

Can be called multiple times with different datasets for a multi-valued graph.

If the color argument is nil, the next color from the default theme will be used.

Examples:

data("Bart S.", [95, 45, 78, 89, 88, 76], '#ffcc00')

Parameters:

  • name (String, Symbol)

    The name of the dataset.

  • data_points (Array) (defaults to: [])

    The array of dataset.

  • color (String) (defaults to: nil)

    The color for drawing graph of dataset.


104
105
106
# File 'lib/gruff/line.rb', line 104

def data(name, data_points = [], color = nil)
  store.add(name, nil, data_points, color)
end

#dataxy(name, x_data_points = [], y_data_points = [], color = nil) ⇒ Object #dataxy(name, xy_data_points = [], color = nil) ⇒ Object

Note:
  • if (x_data_points.length != y_data_points.length) an error is returned.

  • if the color argument is nil, the next color from the default theme will be used.

  • if you want to use a preset theme, you must set it before calling #dataxy.

This method allows one to plot a dataset with both X and Y data.

Examples:

g = Gruff::Line.new
g.title = "X/Y Dataset"
g.dataxy("Apples", [1,3,4,5,6,10], [1, 2, 3, 4, 4, 3])
g.dataxy("Bapples", [1,3,4,5,7,9], [1, 1, 2, 2, 3, 3])
g.dataxy("Capples", [[1,1],[2,3],[3,4],[4,5],[5,7],[6,9]])

# you can still use the old data method too if you want:
g.data("Capples", [1, 1, 2, 2, 3, 3])

# labels will be drawn at the x locations of the keys passed in.
In this example the labels are drawn at x positions 2, 4, and 6:
g.labels = {0 => '2003', 2 => '2004', 4 => '2005', 6 => '2006'}
# The 0 => '2003' label will be ignored since it is outside the chart range.

Overloads:

  • #dataxy(name, x_data_points = [], y_data_points = [], color = nil) ⇒ Object

    Parameters:

    • name (String)

      the title of the dataset.

    • x_data_points (Array) (defaults to: [])

      an array containing the x data points for the graph.

    • y_data_points (Array) (defaults to: [])

      an array containing the y data points for the graph.

    • color (String) (defaults to: nil)

      hex number indicating the line color as an RGB triplet.

  • #dataxy(name, xy_data_points = [], color = nil) ⇒ Object

    Parameters:

    • name (String)

      the title of the dataset.

    • xy_data_points (Array) (defaults to: [])

      an array containing both x and y data points for the graph.

    • color (String) (defaults to: nil)

      hex number indicating the line color as an RGB triplet.

Raises:

  • (ArgumentError)

142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/gruff/line.rb', line 142

def dataxy(name, x_data_points = [], y_data_points = [], color = nil)
  # make sure it's an array
  x_data_points = Array(x_data_points)

  raise ArgumentError, 'x_data_points is nil!' if x_data_points.empty?

  if x_data_points.all? { |p| p.is_a?(Array) && p.size == 2 }
    color = y_data_points if y_data_points.is_a?(String)
    x_data_points, y_data_points = x_data_points.transpose
  else
    y_data_points = Array(y_data_points)
  end

  raise ArgumentError, 'x_data_points.length != y_data_points.length!' if x_data_points.length != y_data_points.length

  # call the existing data routine for the x/y data.
  store.add(name, x_data_points, y_data_points, color)
end