gruff 0.12.2 → 0.15.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +66 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +34 -27
- data/CHANGELOG.md +29 -0
- data/README.md +15 -7
- data/assets/fonts/LICENSE.txt +202 -0
- data/assets/fonts/Roboto-Bold.ttf +0 -0
- data/assets/fonts/Roboto-Regular.ttf +0 -0
- data/gruff.gemspec +9 -10
- data/lib/gruff/accumulator_bar.rb +3 -1
- data/lib/gruff/area.rb +5 -8
- data/lib/gruff/bar.rb +32 -49
- data/lib/gruff/base.rb +199 -115
- data/lib/gruff/bezier.rb +4 -6
- data/lib/gruff/bullet.rb +12 -11
- data/lib/gruff/dot.rb +13 -14
- data/lib/gruff/font.rb +39 -0
- data/lib/gruff/helper/bar_conversion.rb +27 -12
- data/lib/gruff/helper/bar_value_label.rb +71 -0
- data/lib/gruff/helper/stacked_mixin.rb +1 -2
- data/lib/gruff/histogram.rb +9 -7
- data/lib/gruff/line.rb +57 -50
- data/lib/gruff/mini/bar.rb +9 -6
- data/lib/gruff/mini/legend.rb +12 -8
- data/lib/gruff/mini/pie.rb +9 -6
- data/lib/gruff/mini/side_bar.rb +9 -6
- data/lib/gruff/net.rb +9 -15
- data/lib/gruff/patch/rmagick.rb +0 -1
- data/lib/gruff/patch/string.rb +1 -1
- data/lib/gruff/pie.rb +23 -65
- data/lib/gruff/renderer/bezier.rb +8 -9
- data/lib/gruff/renderer/circle.rb +8 -9
- data/lib/gruff/renderer/dash_line.rb +9 -10
- data/lib/gruff/renderer/dot.rb +13 -14
- data/lib/gruff/renderer/ellipse.rb +8 -9
- data/lib/gruff/renderer/line.rb +8 -9
- data/lib/gruff/renderer/polygon.rb +9 -10
- data/lib/gruff/renderer/polyline.rb +8 -9
- data/lib/gruff/renderer/rectangle.rb +7 -8
- data/lib/gruff/renderer/renderer.rb +25 -40
- data/lib/gruff/renderer/text.rb +21 -29
- data/lib/gruff/scatter.rb +55 -75
- data/lib/gruff/scene.rb +28 -18
- data/lib/gruff/side_bar.rb +35 -54
- data/lib/gruff/side_stacked_bar.rb +14 -17
- data/lib/gruff/spider.rb +11 -20
- data/lib/gruff/stacked_area.rb +10 -11
- data/lib/gruff/stacked_bar.rb +14 -15
- data/lib/gruff/store/store.rb +6 -10
- data/lib/gruff/store/xy_data.rb +2 -0
- data/lib/gruff/themes.rb +6 -6
- data/lib/gruff/version.rb +1 -1
- data/lib/gruff.rb +68 -55
- data/rails_generators/gruff/templates/controller.rb +1 -1
- metadata +34 -20
- data/.rubocop_todo.yml +0 -190
- data/.travis.yml +0 -23
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/lib/gruff/helper/bar_value_label_mixin.rb +0 -33
- 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
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
98
|
-
|
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.
|
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
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|