gruff 0.8.0-java → 0.9.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +18 -0
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +93 -0
  5. data/.rubocop_todo.yml +23 -810
  6. data/.travis.yml +4 -4
  7. data/.yardopts +1 -0
  8. data/CHANGELOG.md +22 -0
  9. data/Gemfile +3 -1
  10. data/README.md +44 -21
  11. data/Rakefile +2 -206
  12. data/docker/Dockerfile +14 -0
  13. data/docker/build.sh +4 -0
  14. data/docker/launch.sh +4 -0
  15. data/gruff.gemspec +11 -8
  16. data/init.rb +2 -0
  17. data/lib/gruff.rb +23 -0
  18. data/lib/gruff/accumulator_bar.rb +6 -6
  19. data/lib/gruff/area.rb +13 -17
  20. data/lib/gruff/bar.rb +58 -41
  21. data/lib/gruff/base.rb +243 -566
  22. data/lib/gruff/bezier.rb +12 -14
  23. data/lib/gruff/bullet.rb +39 -57
  24. data/lib/gruff/dot.rb +25 -59
  25. data/lib/gruff/{bar_conversion.rb → helper/bar_conversion.rb} +13 -12
  26. data/lib/gruff/helper/bar_value_label_mixin.rb +30 -0
  27. data/lib/gruff/{stacked_mixin.rb → helper/stacked_mixin.rb} +7 -6
  28. data/lib/gruff/line.rb +95 -177
  29. data/lib/gruff/mini/bar.rb +6 -7
  30. data/lib/gruff/mini/legend.rb +16 -32
  31. data/lib/gruff/mini/pie.rb +6 -7
  32. data/lib/gruff/mini/side_bar.rb +4 -5
  33. data/lib/gruff/net.rb +37 -65
  34. data/lib/gruff/patch/rmagick.rb +33 -0
  35. data/lib/gruff/patch/string.rb +8 -0
  36. data/lib/gruff/photo_bar.rb +19 -19
  37. data/lib/gruff/pie.rb +22 -73
  38. data/lib/gruff/renderer/bezier.rb +21 -0
  39. data/lib/gruff/renderer/circle.rb +21 -0
  40. data/lib/gruff/renderer/dash_line.rb +22 -0
  41. data/lib/gruff/renderer/dot.rb +39 -0
  42. data/lib/gruff/renderer/ellipse.rb +21 -0
  43. data/lib/gruff/renderer/line.rb +34 -0
  44. data/lib/gruff/renderer/polygon.rb +23 -0
  45. data/lib/gruff/renderer/polyline.rb +21 -0
  46. data/lib/gruff/renderer/rectangle.rb +19 -0
  47. data/lib/gruff/renderer/renderer.rb +127 -0
  48. data/lib/gruff/renderer/text.rb +42 -0
  49. data/lib/gruff/scatter.rb +85 -156
  50. data/lib/gruff/scene.rb +22 -30
  51. data/lib/gruff/side_bar.rb +62 -58
  52. data/lib/gruff/side_stacked_bar.rb +47 -43
  53. data/lib/gruff/spider.rb +19 -36
  54. data/lib/gruff/stacked_area.rb +17 -21
  55. data/lib/gruff/stacked_bar.rb +50 -24
  56. data/lib/gruff/store/base_data.rb +34 -0
  57. data/lib/gruff/store/custom_data.rb +34 -0
  58. data/lib/gruff/store/store.rb +80 -0
  59. data/lib/gruff/store/xy_data.rb +55 -0
  60. data/lib/gruff/themes.rb +3 -3
  61. data/lib/gruff/version.rb +3 -1
  62. metadata +41 -30
  63. data/Manifest.txt +0 -81
  64. data/assets/bubble.png +0 -0
  65. data/assets/city_scene/background/0000.png +0 -0
  66. data/assets/city_scene/background/0600.png +0 -0
  67. data/assets/city_scene/background/2000.png +0 -0
  68. data/assets/city_scene/clouds/cloudy.png +0 -0
  69. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  70. data/assets/city_scene/clouds/stormy.png +0 -0
  71. data/assets/city_scene/grass/default.png +0 -0
  72. data/assets/city_scene/haze/true.png +0 -0
  73. data/assets/city_scene/number_sample/1.png +0 -0
  74. data/assets/city_scene/number_sample/2.png +0 -0
  75. data/assets/city_scene/number_sample/default.png +0 -0
  76. data/assets/city_scene/sky/0000.png +0 -0
  77. data/assets/city_scene/sky/0200.png +0 -0
  78. data/assets/city_scene/sky/0400.png +0 -0
  79. data/assets/city_scene/sky/0600.png +0 -0
  80. data/assets/city_scene/sky/0800.png +0 -0
  81. data/assets/city_scene/sky/1000.png +0 -0
  82. data/assets/city_scene/sky/1200.png +0 -0
  83. data/assets/city_scene/sky/1400.png +0 -0
  84. data/assets/city_scene/sky/1500.png +0 -0
  85. data/assets/city_scene/sky/1700.png +0 -0
  86. data/assets/city_scene/sky/2000.png +0 -0
  87. data/assets/pc306715.jpg +0 -0
  88. data/lib/gruff/deprecated.rb +0 -38
@@ -1,45 +1,62 @@
1
- require File.dirname(__FILE__) + '/base'
1
+ # frozen_string_literal: true
2
2
 
3
- ##
4
- # Graph with individual horizontal bars instead of vertical bars.
3
+ require 'gruff/base'
5
4
 
5
+ # Graph with individual horizontal bars instead of vertical bars.
6
6
  class Gruff::SideBar < Gruff::Base
7
-
8
- # Spacing factor applied between bars
7
+ # Spacing factor applied between bars.
9
8
  attr_accessor :bar_spacing
10
9
 
10
+ # Spacing factor applied between a group of bars belonging to the same label.
11
+ attr_accessor :group_spacing
12
+
13
+ # Set the number output format for labels using sprintf.
14
+ # Default is +"%.2f"+.
15
+ attr_accessor :label_formatting
16
+
17
+ # Output the values for the bars on a bar graph.
18
+ # Default is +false+.
19
+ attr_accessor :show_labels_for_bar_values
20
+
21
+ def initialize_ivars
22
+ super
23
+ @label_formatting = nil
24
+ @show_labels_for_bar_values = false
25
+ end
26
+ private :initialize_ivars
27
+
11
28
  def draw
12
29
  @has_left_labels = true
13
30
  super
14
31
 
15
- return unless @has_data
32
+ return unless data_given?
16
33
 
17
34
  draw_bars
18
35
  end
19
36
 
20
- protected
37
+ private
21
38
 
22
39
  def draw_bars
23
40
  # Setup spacing.
24
41
  #
25
42
  @bar_spacing ||= 0.9
43
+ @group_spacing ||= 10
26
44
 
27
- @bars_width = @graph_height / @column_count.to_f
28
- @bar_width = @bars_width / @norm_data.size
29
- @d = @d.stroke_opacity 0.0
30
- height = Array.new(@column_count, 0)
31
- length = Array.new(@column_count, @graph_left)
32
- padding = (@bar_width * (1 - @bar_spacing)) / 2
45
+ bars_width = (@graph_height - calculate_spacing) / column_count.to_f
46
+ bar_width = bars_width / store.length
47
+ height = Array.new(column_count, 0)
48
+ length = Array.new(column_count, @graph_left)
49
+ padding = (bar_width * (1 - @bar_spacing)) / 2
33
50
 
34
51
  # if we're a side stacked bar then we don't need to draw ourself at all
35
52
  # because sometimes (due to different heights/min/max) you can actually
36
53
  # see both graphs and it looks like crap
37
- return if self.is_a?(Gruff::SideStackedBar)
54
+ return if is_a?(Gruff::SideStackedBar)
38
55
 
39
- @norm_data.each_with_index do |data_row, row_index|
40
- @d = @d.fill data_row[DATA_COLOR_INDEX]
56
+ store.norm_data.each_with_index do |data_row, row_index|
57
+ data_row.points.each_with_index do |data_point, point_index|
58
+ group_spacing = @group_spacing * @scale * point_index
41
59
 
42
- data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index|
43
60
  # Using the original calcs from the stacked bar chart
44
61
  # to get the difference between
45
62
  # part of the bart chart we wish to stack.
@@ -48,67 +65,55 @@ protected
48
65
  difference = temp2 - temp1
49
66
 
50
67
  left_x = length[point_index] - 1
51
- left_y = @graph_top + (@bars_width * point_index) + (@bar_width * row_index) + padding
68
+ left_y = @graph_top + (bars_width * point_index) + (bar_width * row_index) + padding + group_spacing
52
69
  right_x = left_x + difference
53
- right_y = left_y + @bar_width * @bar_spacing
70
+ right_y = left_y + bar_width * @bar_spacing
54
71
 
55
72
  height[point_index] += (data_point * @graph_width)
56
73
 
57
- @d = @d.rectangle(left_x, left_y, right_x, right_y)
74
+ rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
75
+ rect_renderer.render(left_x, left_y, right_x, right_y)
58
76
 
59
77
  # Calculate center based on bar_width and current row
60
78
 
61
79
  if @use_data_label
62
- label_center = @graph_top + (@bar_width * (row_index + point_index) + @bar_width / 2)
63
- draw_label(label_center, row_index, @norm_data[row_index][DATA_LABEL_INDEX])
80
+ label_center = left_y + bar_width / 2
81
+ draw_label(label_center, row_index, store.norm_data[row_index].label)
64
82
  else
65
- label_center = @graph_top + (@bars_width * point_index + @bars_width / 2)
83
+ label_center = left_y + bars_width / 2
66
84
  draw_label(label_center, point_index)
67
85
  end
68
86
  if @show_labels_for_bar_values
69
- val = (@label_formatting || '%.2f') % @norm_data[row_index][3][point_index]
70
- draw_value_label(right_x + 40, (@graph_top + (((row_index + point_index + 1) * @bar_width) - (@bar_width / 2))) - 12, val.commify, true)
87
+ val = (@label_formatting || '%.2f') % store.data[row_index].points[point_index]
88
+ draw_value_label(right_x + 40, right_y - bar_width / 2, val.commify, true)
71
89
  end
72
90
  end
73
91
  end
74
92
 
75
- @d.draw(@base_image)
93
+ Gruff::Renderer.finish
76
94
  end
77
95
 
78
96
  # Instead of base class version, draws vertical background lines and label
79
97
  def draw_line_markers
80
98
  return if @hide_line_markers
81
99
 
82
- @d = @d.stroke_antialias false
83
-
84
100
  # Draw horizontal line markers and annotate with numbers
85
- @d = @d.stroke(@marker_color)
86
- @d = @d.stroke_width 1
87
101
  number_of_lines = @marker_count || 5
88
102
  number_of_lines = 1 if number_of_lines == 0
89
103
 
90
- # TODO Round maximum marker value to a round number like 100, 0.1, 0.5, etc.
104
+ # TODO: Round maximum marker value to a round number like 100, 0.1, 0.5, etc.
91
105
  increment = significant(@spread.to_f / number_of_lines)
92
106
  (0..number_of_lines).each do |index|
93
107
  line_diff = (@graph_right - @graph_left) / number_of_lines
94
108
  x = @graph_right - (line_diff * index) - 1
95
- @d = @d.line(x, @graph_bottom, x, @graph_top)
109
+ Gruff::Renderer::Line.new(color: @marker_color).render(x, @graph_bottom, x, @graph_top)
96
110
  diff = index - number_of_lines
97
- marker_label = diff.abs * increment + @minimum_value
111
+ marker_label = diff.abs * increment + minimum_value
98
112
 
99
113
  unless @hide_line_numbers
100
- @d.fill = @font_color
101
- @d.font = @font if @font
102
- @d.stroke = 'transparent'
103
- @d.pointsize = scale_fontsize(@marker_font_size)
104
- @d.gravity = CenterGravity
105
- # TODO Center text over line
106
- @d = @d.annotate_scaled(@base_image,
107
- 0, 0, # Width of box to draw text in
108
- x, @graph_bottom + (LABEL_MARGIN * 2.0), # Coordinates of text
109
- marker_label.to_s, @scale)
110
- end # unless
111
- @d = @d.stroke_antialias true
114
+ text_renderer = Gruff::Renderer::Text.new(marker_label, font: @font, size: @marker_font_size, color: @font_color)
115
+ text_renderer.render(0, 0, x, @graph_bottom + (LABEL_MARGIN * 2.0), Magick::CenterGravity)
116
+ end
112
117
  end
113
118
  end
114
119
 
@@ -116,20 +121,19 @@ protected
116
121
  # Draw on the Y axis instead of the X
117
122
 
118
123
  def draw_label(y_offset, index, label = nil)
119
- if !@labels[index].nil? && @labels_seen[index].nil?
120
- lbl = (@use_data_label) ? label : @labels[index]
121
- @d.fill = @font_color
122
- @d.font = @font if @font
123
- @d.stroke = 'transparent'
124
- @d.font_weight = NormalWeight
125
- @d.pointsize = scale_fontsize(@marker_font_size)
126
- @d.gravity = EastGravity
127
- @d = @d.annotate_scaled(@base_image,
128
- 1, 1,
129
- -@graph_left + LABEL_MARGIN * 2.0, y_offset,
130
- lbl, @scale)
131
- @labels_seen[index] = 1
124
+ draw_unique_label(index) do
125
+ lbl = @use_data_label ? label : @labels[index]
126
+
127
+ text_renderer = Gruff::Renderer::Text.new(lbl, font: @font, size: @marker_font_size, color: @font_color)
128
+ if RUBY_PLATFORM == 'java'
129
+ text_renderer.render(1, 1, @graph_left - LABEL_MARGIN * 2.0, y_offset, Magick::EastGravity)
130
+ else
131
+ text_renderer.render(1, 1, -@graph_left + LABEL_MARGIN * 2.0, y_offset, Magick::EastGravity)
132
+ end
132
133
  end
133
134
  end
134
135
 
136
+ def calculate_spacing
137
+ @scale * @group_spacing * (column_count - 1)
138
+ end
135
139
  end
@@ -1,44 +1,60 @@
1
- require File.dirname(__FILE__) + '/base'
2
- require File.dirname(__FILE__) + '/side_bar'
3
- require File.dirname(__FILE__) + '/stacked_mixin'
1
+ # frozen_string_literal: true
2
+
3
+ require 'gruff/side_bar'
4
+ require 'gruff/helper/stacked_mixin'
4
5
 
5
- ##
6
6
  # New gruff graph type added to enable sideways stacking bar charts
7
7
  # (basically looks like a x/y flip of a standard stacking bar chart)
8
8
  #
9
9
  # alun.eyre@googlemail.com
10
-
11
10
  class Gruff::SideStackedBar < Gruff::SideBar
12
11
  include StackedMixin
12
+ include BarValueLabelMixin
13
13
 
14
- # Spacing factor applied between bars
14
+ # Spacing factor applied between bars.
15
15
  attr_accessor :bar_spacing
16
16
 
17
+ # Number of pixels between bar segments.
18
+ attr_accessor :segment_spacing
19
+
20
+ # Set the number output format for labels using sprintf.
21
+ # Default is +"%.2f"+.
22
+ attr_accessor :label_formatting
23
+
24
+ # Output the values for the bars on a bar graph.
25
+ # Default is +false+.
26
+ attr_accessor :show_labels_for_bar_values
27
+
28
+ def initialize_ivars
29
+ super
30
+ @label_formatting = nil
31
+ @show_labels_for_bar_values = false
32
+ end
33
+ private :initialize_ivars
34
+
17
35
  def draw
18
36
  @has_left_labels = true
19
37
  get_maximum_by_stack
20
38
  super
21
39
  end
22
40
 
23
- protected
41
+ private
24
42
 
25
43
  def draw_bars
26
44
  # Setup spacing.
27
45
  #
28
46
  # Columns sit stacked.
29
47
  @bar_spacing ||= 0.9
48
+ @segment_spacing ||= 2.0
30
49
 
31
- @bar_width = @graph_height / @column_count.to_f
32
- @d = @d.stroke_opacity 0.0
33
- height = Array.new(@column_count, 0)
34
- length = Array.new(@column_count, @graph_left)
35
- padding = (@bar_width * (1 - @bar_spacing)) / 2
36
- if @show_labels_for_bar_values
37
- label_values = Array.new
38
- 0.upto(@column_count - 1) { |i| label_values[i] = { value: 0, right_x: 0 } }
39
- end
40
- @norm_data.each_with_index do |data_row, row_index|
41
- data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index|
50
+ bar_width = @graph_height / column_count.to_f
51
+ height = Array.new(column_count, 0)
52
+ length = Array.new(column_count, @graph_left)
53
+ padding = (bar_width * (1 - @bar_spacing)) / 2
54
+ bar_value_label = BarValueLabel.new(column_count, bar_width)
55
+
56
+ store.norm_data.each_with_index do |data_row, row_index|
57
+ data_row.points.each_with_index do |data_point, point_index|
42
58
  ## using the original calcs from the stacked bar chart to get the difference between
43
59
  ## part of the bart chart we wish to stack.
44
60
  temp1 = @graph_left + (@graph_width -
@@ -47,49 +63,37 @@ protected
47
63
  temp2 = @graph_left + @graph_width - height[point_index] - 1
48
64
  difference = temp2 - temp1
49
65
 
50
- @d = @d.fill data_row[DATA_COLOR_INDEX]
51
-
52
- left_x = length[point_index] #+ 1
53
- left_y = @graph_top + (@bar_width * point_index) + padding
54
- right_x = left_x + difference
55
- right_y = left_y + @bar_width * @bar_spacing
66
+ left_x = length[point_index]
67
+ left_y = @graph_top + (bar_width * point_index) + padding
68
+ right_x = left_x + difference - @segment_spacing
69
+ right_y = left_y + bar_width * @bar_spacing
56
70
  length[point_index] += difference
57
71
  height[point_index] += (data_point * @graph_width - 2)
58
72
 
59
- if @show_labels_for_bar_values
60
- label_values[point_index][:value] += @norm_data[row_index][3][point_index]
61
- label_values[point_index][:right_x] = right_x
62
- end
73
+ bar_value_label.coordinates[point_index] = [left_x, left_y, right_x, right_y]
74
+ bar_value_label.values[point_index] += store.data[row_index].points[point_index]
63
75
 
64
76
  # if a data point is 0 it can result in weird really thing lines
65
77
  # that shouldn't even be there being drawn on top of the existing
66
78
  # bar - this is bad
67
79
  if data_point != 0
68
- @d = @d.rectangle(left_x, left_y, right_x, right_y)
80
+ rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
81
+ rect_renderer.render(left_x, left_y, right_x, right_y)
69
82
  # Calculate center based on bar_width and current row
70
83
  end
71
84
  # we still need to draw the labels
72
85
  # Calculate center based on bar_width and current row
73
- label_center = @graph_top + (@bar_width * point_index) + (@bar_width * @bar_spacing / 2.0)
86
+ label_center = left_y + bar_width / 2
74
87
  draw_label(label_center, point_index)
75
88
  end
76
89
  end
90
+
77
91
  if @show_labels_for_bar_values
78
- label_values.each_with_index do |data, i|
79
- val = (@label_formatting || "%.2f") % data[:value]
80
- draw_value_label(data[:right_x] + 40, (@graph_top + (((i + 1) * @bar_width) - (@bar_width / 2))) - 12, val.commify, true)
92
+ bar_value_label.prepare_sidebar_rendering(@label_formatting) do |x, y, text|
93
+ draw_value_label(x, y, text, true)
81
94
  end
82
95
  end
83
96
 
84
- @d.draw(@base_image)
97
+ Gruff::Renderer.finish
85
98
  end
86
-
87
- def larger_than_max?(data_point, index = 0)
88
- max(data_point, index) > @maximum_value
89
- end
90
-
91
- def max(data_point, index)
92
- @data.inject(0) { |sum, item| sum + item[DATA_VALUES_INDEX][index] }
93
- end
94
-
95
99
  end
@@ -1,19 +1,19 @@
1
- require File.dirname(__FILE__) + '/base'
1
+ # frozen_string_literal: true
2
+
3
+ require 'gruff/base'
2
4
 
3
5
  # Experimental!!! See also the Net graph.
4
6
  #
5
7
  # Submitted by Kevin Clark http://glu.ttono.us/
6
8
  class Gruff::Spider < Gruff::Base
7
-
8
- # Hide all text
9
+ # Hide all text.
9
10
  attr_reader :hide_text
10
11
  attr_accessor :hide_axes
11
12
  attr_reader :transparent_background
12
13
  attr_accessor :rotation
13
14
 
14
15
  def transparent_background=(value)
15
- @transparent_background = value
16
- @base_image = render_transparent_background if value
16
+ Gruff::Renderer.setup_transparent_background(@columns, @rows) if value
17
17
  end
18
18
 
19
19
  def hide_text=(value)
@@ -32,7 +32,7 @@ class Gruff::Spider < Gruff::Base
32
32
 
33
33
  super
34
34
 
35
- return unless @has_data
35
+ return unless data_given?
36
36
 
37
37
  # Setup basic positioning
38
38
  radius = @graph_height / 2.0
@@ -41,7 +41,7 @@ class Gruff::Spider < Gruff::Base
41
41
 
42
42
  @unit_length = radius / @max_value
43
43
 
44
- additive_angle = (2 * Math::PI) / @data.size
44
+ additive_angle = (2 * Math::PI) / store.length
45
45
 
46
46
  # Draw axes
47
47
  draw_axes(center_x, center_y, radius, additive_angle) unless hide_axes
@@ -49,7 +49,7 @@ class Gruff::Spider < Gruff::Base
49
49
  # Draw polygon
50
50
  draw_polygon(center_x, center_y, additive_angle)
51
51
 
52
- @d.draw(@base_image)
52
+ Gruff::Renderer.finish
53
53
  end
54
54
 
55
55
  private
@@ -66,16 +66,8 @@ private
66
66
  y = y_offset + ((radius + r_offset) * Math.sin(angle))
67
67
 
68
68
  # Draw label
69
- @d.fill = @marker_color
70
- @d.font = @font if @font
71
- @d.pointsize = scale_fontsize(legend_font_size)
72
- @d.stroke = 'transparent'
73
- @d.font_weight = BoldWeight
74
- @d.gravity = CenterGravity
75
- @d.annotate_scaled(@base_image,
76
- 0, 0,
77
- x, y,
78
- amount, @scale)
69
+ text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: legend_font_size, color: @marker_color, weight: Magick::BoldWeight)
70
+ text_renderer.render(0, 0, x, y, Magick::CenterGravity)
79
71
  end
80
72
 
81
73
  def draw_axes(center_x, center_y, radius, additive_angle, line_color = nil)
@@ -83,18 +75,14 @@ private
83
75
 
84
76
  current_angle = rotation * Math::PI / 180.0
85
77
 
86
- @data.each do |data_row|
87
- @d.stroke(line_color || data_row[DATA_COLOR_INDEX])
88
- @d.stroke_width 5.0
89
-
78
+ store.data.each do |data_row|
90
79
  x_offset = radius * Math.cos(current_angle)
91
80
  y_offset = radius * Math.sin(current_angle)
92
81
 
93
- @d.line(center_x, center_y,
94
- center_x + x_offset,
95
- center_y + y_offset)
82
+ Gruff::Renderer::Line.new(color: line_color || data_row.color, width: 5.0)
83
+ .render(center_x, center_y, center_x + x_offset, center_y + y_offset)
96
84
 
97
- draw_label(center_x, center_y, current_angle, radius, data_row[DATA_LABEL_INDEX].to_s) unless hide_text
85
+ draw_label(center_x, center_y, current_angle, radius, data_row.label.to_s) unless hide_text
98
86
 
99
87
  current_angle += additive_angle
100
88
  end
@@ -104,21 +92,16 @@ private
104
92
  points = []
105
93
  current_angle = rotation * Math::PI / 180.0
106
94
 
107
- @data.each do |data_row|
108
- points << center_x + normalize_points(data_row[DATA_VALUES_INDEX].first) * Math.cos(current_angle)
109
- points << center_y + normalize_points(data_row[DATA_VALUES_INDEX].first) * Math.sin(current_angle)
95
+ store.data.each do |data_row|
96
+ points << center_x + normalize_points(data_row.points.first) * Math.cos(current_angle)
97
+ points << center_y + normalize_points(data_row.points.first) * Math.sin(current_angle)
110
98
  current_angle += additive_angle
111
99
  end
112
100
 
113
- @d.stroke_width 1.0
114
- @d.stroke(color || @marker_color)
115
- @d.fill(color || @marker_color)
116
- @d.fill_opacity 0.4
117
- @d.polygon(*points)
101
+ Gruff::Renderer::Polygon.new(color: color || @marker_color, opacity: 0.4).render(points)
118
102
  end
119
103
 
120
104
  def sums_for_spider
121
- @data.inject(0.0) { |sum, data_row| sum + data_row[DATA_VALUES_INDEX].first }
105
+ store.data.reduce(0.0) { |sum, data_row| sum + data_row.points.first }
122
106
  end
123
-
124
107
  end