gruff 0.12.2 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|