Class Gruff::Spider
In: lib/gruff/spider.rb
Parent: Gruff::Base
StackedMixin StackedBar SideStackedBar StackedArea AccumulatorBar Base Scene Pie Area PhotoBar Bullet Spider SideBar Net Bar Line Pie Observable Group SideBar StandardError IncorrectNumberOfDatasetsException Magick Bar Layer BarConversion lib/gruff/stacked_area.rb lib/gruff/scene.rb lib/gruff/spider.rb lib/gruff/pie.rb lib/gruff/bullet.rb lib/gruff/area.rb lib/gruff/net.rb lib/gruff/bar_conversion.rb lib/gruff/bar.rb lib/gruff/side_bar.rb lib/gruff/line.rb lib/gruff/stacked_bar.rb lib/gruff/side_stacked_bar.rb lib/gruff/photo_bar.rb lib/gruff/base.rb lib/gruff/accumulator_bar.rb lib/gruff/mini/bar.rb lib/gruff/mini/side_bar.rb lib/gruff/mini/pie.rb Legend Mini Deprecated Gruff dot/m_11_0.png

Experimental!!! See also the Net graph.

Submitted by Kevin Clark glu.ttono.us/

Methods

Attributes

hide_axes  [RW] 
hide_text  [R]  Hide all text
transparent_background  [R] 

Public Class methods

[Source]

    # File lib/gruff/spider.rb, line 23
23:   def initialize(max_value, target_width = 800)
24:     super(target_width)
25:     @max_value = max_value
26:     @hide_legend = true;
27:   end

Public Instance methods

[Source]

    # File lib/gruff/spider.rb, line 29
29:   def draw
30:     @hide_line_markers = true
31:     
32:     super
33: 
34:     return unless @has_data
35: 
36:     # Setup basic positioning
37:     diameter = @graph_height
38:     radius = @graph_height / 2.0
39:     top_x = @graph_left + (@graph_width - diameter) / 2.0
40:     center_x = @graph_left + (@graph_width / 2.0)
41:     center_y = @graph_top + (@graph_height / 2.0) - 25 # Move graph up a bit
42:     
43:     @unit_length = radius / @max_value
44:     
45:         
46:     total_sum = sums_for_spider
47:     prev_degrees = 0.0
48:     additive_angle = (2 * Math::PI)/ @data.size
49:     
50:     current_angle = 0.0
51: 
52:     # Draw axes
53:     draw_axes(center_x, center_y, radius, additive_angle) unless hide_axes    
54:     
55:     # Draw polygon
56:     draw_polygon(center_x, center_y, additive_angle)
57:     
58:      
59:     @d.draw(@base_image)
60:   end

[Source]

    # File lib/gruff/spider.rb, line 19
19:   def hide_text=(value)
20:     @hide_title = @hide_text = value
21:   end

[Source]

    # File lib/gruff/spider.rb, line 14
14:   def transparent_background=(value)
15:     @transparent_background = value
16:     @base_image = render_transparent_background if value
17:   end

Private Instance methods

[Source]

     # File lib/gruff/spider.rb, line 88
 88:   def draw_axes(center_x, center_y, radius, additive_angle, line_color = nil)
 89:     return if hide_axes
 90:     
 91:     current_angle = 0.0
 92:     
 93:     @data.each do |data_row|
 94:       @d.stroke(line_color || data_row[DATA_COLOR_INDEX])
 95:       @d.stroke_width 5.0
 96:     
 97:       x_offset = radius * Math.cos(current_angle)
 98:       y_offset = radius * Math.sin(current_angle)
 99: 
100:       @d.line(center_x, center_y,
101:               center_x + x_offset,
102:               center_y + y_offset)
103:             
104:       draw_label(center_x, center_y, current_angle, radius, data_row[DATA_LABEL_INDEX].to_s) unless hide_text
105:             
106:       current_angle += additive_angle
107:     end
108:   end

[Source]

    # File lib/gruff/spider.rb, line 68
68:   def draw_label(center_x, center_y, angle, radius, amount)
69:     r_offset = 50      # The distance out from the center of the pie to get point
70:     x_offset = center_x      # The label points need to be tweaked slightly
71:     y_offset = center_y + 0  # This one doesn't though
72:     x = x_offset + ((radius + r_offset) * Math.cos(angle))
73:     y = y_offset + ((radius + r_offset) * Math.sin(angle))
74:     
75:     # Draw label
76:     @d.fill = @marker_color
77:     @d.font = @font if @font
78:     @d.pointsize = scale_fontsize(legend_font_size)
79:     @d.stroke = 'transparent'
80:     @d.font_weight = BoldWeight
81:     @d.gravity = CenterGravity
82:     @d.annotate_scaled( @base_image, 
83:                       0, 0,
84:                       x, y, 
85:                       amount, @scale)
86:   end

[Source]

     # File lib/gruff/spider.rb, line 110
110:   def draw_polygon(center_x, center_y, additive_angle, color = nil)
111:     points = []
112:     current_angle = 0.0
113:     @data.each do |data_row|
114:       points << center_x + normalize_points(data_row[DATA_VALUES_INDEX].first) * Math.cos(current_angle)
115:       points << center_y + normalize_points(data_row[DATA_VALUES_INDEX].first) * Math.sin(current_angle)
116:       current_angle += additive_angle
117:     end
118:     
119:     @d.stroke_width 1.0
120:     @d.stroke(color || @marker_color)
121:     @d.fill(color || @marker_color)
122:     @d.fill_opacity 0.4
123:     @d.polygon(*points)
124:   end

[Source]

    # File lib/gruff/spider.rb, line 64
64:   def normalize_points(value)
65:     value * @unit_length
66:   end

[Source]

     # File lib/gruff/spider.rb, line 126
126:   def sums_for_spider
127:     @data.inject(0.0) {|sum, data_row| sum += data_row[DATA_VALUES_INDEX].first}
128:   end

[Validate]