gruff 0.12.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +66 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +34 -27
  5. data/CHANGELOG.md +29 -0
  6. data/README.md +15 -7
  7. data/assets/fonts/LICENSE.txt +202 -0
  8. data/assets/fonts/Roboto-Bold.ttf +0 -0
  9. data/assets/fonts/Roboto-Regular.ttf +0 -0
  10. data/gruff.gemspec +9 -10
  11. data/lib/gruff/accumulator_bar.rb +3 -1
  12. data/lib/gruff/area.rb +5 -8
  13. data/lib/gruff/bar.rb +32 -49
  14. data/lib/gruff/base.rb +199 -115
  15. data/lib/gruff/bezier.rb +4 -6
  16. data/lib/gruff/bullet.rb +12 -11
  17. data/lib/gruff/dot.rb +13 -14
  18. data/lib/gruff/font.rb +39 -0
  19. data/lib/gruff/helper/bar_conversion.rb +27 -12
  20. data/lib/gruff/helper/bar_value_label.rb +71 -0
  21. data/lib/gruff/helper/stacked_mixin.rb +1 -2
  22. data/lib/gruff/histogram.rb +9 -7
  23. data/lib/gruff/line.rb +57 -50
  24. data/lib/gruff/mini/bar.rb +9 -6
  25. data/lib/gruff/mini/legend.rb +12 -8
  26. data/lib/gruff/mini/pie.rb +9 -6
  27. data/lib/gruff/mini/side_bar.rb +9 -6
  28. data/lib/gruff/net.rb +9 -15
  29. data/lib/gruff/patch/rmagick.rb +0 -1
  30. data/lib/gruff/patch/string.rb +1 -1
  31. data/lib/gruff/pie.rb +23 -65
  32. data/lib/gruff/renderer/bezier.rb +8 -9
  33. data/lib/gruff/renderer/circle.rb +8 -9
  34. data/lib/gruff/renderer/dash_line.rb +9 -10
  35. data/lib/gruff/renderer/dot.rb +13 -14
  36. data/lib/gruff/renderer/ellipse.rb +8 -9
  37. data/lib/gruff/renderer/line.rb +8 -9
  38. data/lib/gruff/renderer/polygon.rb +9 -10
  39. data/lib/gruff/renderer/polyline.rb +8 -9
  40. data/lib/gruff/renderer/rectangle.rb +7 -8
  41. data/lib/gruff/renderer/renderer.rb +25 -40
  42. data/lib/gruff/renderer/text.rb +21 -29
  43. data/lib/gruff/scatter.rb +55 -75
  44. data/lib/gruff/scene.rb +28 -18
  45. data/lib/gruff/side_bar.rb +35 -54
  46. data/lib/gruff/side_stacked_bar.rb +14 -17
  47. data/lib/gruff/spider.rb +11 -20
  48. data/lib/gruff/stacked_area.rb +10 -11
  49. data/lib/gruff/stacked_bar.rb +14 -15
  50. data/lib/gruff/store/store.rb +6 -10
  51. data/lib/gruff/store/xy_data.rb +2 -0
  52. data/lib/gruff/themes.rb +6 -6
  53. data/lib/gruff/version.rb +1 -1
  54. data/lib/gruff.rb +68 -55
  55. data/rails_generators/gruff/templates/controller.rb +1 -1
  56. metadata +34 -20
  57. data/.rubocop_todo.yml +0 -190
  58. data/.travis.yml +0 -23
  59. data/assets/plastik/blue.png +0 -0
  60. data/assets/plastik/green.png +0 -0
  61. data/assets/plastik/red.png +0 -0
  62. data/lib/gruff/helper/bar_value_label_mixin.rb +0 -33
  63. data/lib/gruff/photo_bar.rb +0 -93
data/lib/gruff/bar.rb CHANGED
@@ -16,15 +16,13 @@
16
16
  # g.write('bar.png')
17
17
  #
18
18
  class Gruff::Bar < Gruff::Base
19
- using String::GruffCommify
20
-
21
19
  # Spacing factor applied between bars.
22
20
  attr_writer :bar_spacing
23
21
 
24
22
  # Spacing factor applied between a group of bars belonging to the same label.
25
23
  attr_writer :group_spacing
26
24
 
27
- # Set the number output format for labels using sprintf.
25
+ # Set the number output format string or lambda.
28
26
  # Default is +"%.2f"+.
29
27
  attr_writer :label_formatting
30
28
 
@@ -35,7 +33,21 @@ class Gruff::Bar < Gruff::Base
35
33
  # Prevent drawing of column labels below a bar graph. Default is +false+.
36
34
  attr_writer :hide_labels
37
35
 
38
- def initialize_ivars
36
+ # Can be used to adjust the spaces between the bars.
37
+ # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
38
+ # and 1 means that each bars' width is nearly 0 (so each bar is a simple
39
+ # line with no x dimension).
40
+ #
41
+ # Default value is +0.9+.
42
+ def spacing_factor=(space_percent)
43
+ raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' unless (space_percent >= 0) && (space_percent <= 1)
44
+
45
+ @spacing_factor = (1 - space_percent)
46
+ end
47
+
48
+ private
49
+
50
+ def initialize_attributes
39
51
  super
40
52
  @spacing_factor = 0.9
41
53
  @group_spacing = 10
@@ -43,34 +55,16 @@ class Gruff::Bar < Gruff::Base
43
55
  @show_labels_for_bar_values = false
44
56
  @hide_labels = false
45
57
  end
46
- private :initialize_ivars
47
58
 
48
- def draw
59
+ def setup_drawing
49
60
  # Labels will be centered over the left of the bar if
50
61
  # there are more labels than columns. This is basically the same
51
62
  # as where it would be for a line graph.
52
63
  @center_labels_over_point = (@labels.keys.length > column_count)
53
64
 
54
65
  super
55
- return unless data_given?
56
-
57
- draw_bars
58
66
  end
59
67
 
60
- # Can be used to adjust the spaces between the bars.
61
- # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
62
- # and 1 means that each bars' width is nearly 0 (so each bar is a simple
63
- # line with no x dimension).
64
- #
65
- # Default value is +0.9+.
66
- def spacing_factor=(space_percent)
67
- raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' unless (space_percent >= 0) && (space_percent <= 1)
68
-
69
- @spacing_factor = (1 - space_percent)
70
- end
71
-
72
- protected
73
-
74
68
  def hide_labels?
75
69
  @hide_labels
76
70
  end
@@ -83,7 +77,10 @@ protected
83
77
  hide_labels?
84
78
  end
85
79
 
86
- def draw_bars
80
+ # Value to avoid completely overwriting the coordinate axis
81
+ AXIS_MARGIN = 0.5
82
+
83
+ def draw_graph
87
84
  # Setup spacing.
88
85
  #
89
86
  # Columns sit side-by-side.
@@ -93,24 +90,10 @@ protected
93
90
  padding = (bar_width * (1 - @bar_spacing)) / 2
94
91
 
95
92
  # Setup the BarConversion Object
96
- conversion = Gruff::BarConversion.new
97
- conversion.graph_height = @graph_height
98
- conversion.graph_top = @graph_top
99
-
100
- # Set up the right mode [1,2,3] see BarConversion for further explanation
101
- if minimum_value >= 0
102
- # all bars go from zero to positive
103
- conversion.mode = 1
104
- elsif maximum_value <= 0
105
- # all bars go from 0 to negative
106
- conversion.mode = 2
107
- else
108
- # bars either go from zero to negative or to positive
109
- conversion.mode = 3
110
- conversion.spread = @spread
111
- conversion.minimum_value = minimum_value
112
- conversion.zero = -minimum_value / @spread
113
- end
93
+ conversion = Gruff::BarConversion.new(
94
+ top: @graph_top, bottom: @graph_bottom,
95
+ minimum_value: minimum_value, maximum_value: maximum_value, spread: @spread
96
+ )
114
97
 
115
98
  # iterate over all normalised data
116
99
  store.norm_data.each_with_index do |data_row, row_index|
@@ -122,11 +105,11 @@ protected
122
105
  left_x = @graph_left + (bar_width * (row_index + point_index + ((store.length - 1) * point_index))) + padding + group_spacing
123
106
  right_x = left_x + bar_width * @bar_spacing
124
107
  # y
125
- left_y, right_y = conversion.get_left_y_right_y_scaled(data_point)
108
+ left_y, right_y = conversion.get_top_bottom_scaled(data_point)
126
109
 
127
110
  # create new bar
128
- rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
129
- rect_renderer.render(left_x, left_y, right_x, right_y)
111
+ rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: data_row.color)
112
+ rect_renderer.render(left_x, left_y - AXIS_MARGIN, right_x, right_y - AXIS_MARGIN)
130
113
 
131
114
  # Calculate center based on bar_width and current row
132
115
  label_center = @graph_left + group_spacing + (store.length * bar_width * point_index) + (store.length * bar_width / 2.0)
@@ -134,10 +117,10 @@ protected
134
117
  # Subtract half a bar width to center left if requested
135
118
  draw_label(label_center, point_index)
136
119
  if @show_labels_for_bar_values
137
- raw_value = store.data[row_index].points[point_index]
138
- val = (@label_formatting || '%.2f') % raw_value
139
- y = raw_value >= 0 ? left_y - 30 : left_y + 12
140
- draw_value_label(left_x + (right_x - left_x) / 2, y, val.commify, true)
120
+ bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
121
+ bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
122
+ draw_value_label(x, y, text)
123
+ end
141
124
  end
142
125
  end
143
126
  end