gruff 0.10.0-java → 0.11.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -3
- data/.rubocop_todo.yml +1 -19
- data/CHANGELOG.md +11 -0
- data/Rakefile +24 -0
- data/lib/gruff/area.rb +2 -2
- data/lib/gruff/bar.rb +5 -5
- data/lib/gruff/base.rb +173 -149
- data/lib/gruff/bullet.rb +12 -7
- data/lib/gruff/dot.rb +8 -28
- data/lib/gruff/helper/bar_conversion.rb +6 -6
- data/lib/gruff/histogram.rb +25 -24
- data/lib/gruff/line.rb +24 -15
- data/lib/gruff/mini/legend.rb +1 -1
- data/lib/gruff/net.rb +15 -15
- data/lib/gruff/photo_bar.rb +12 -12
- data/lib/gruff/pie.rb +18 -25
- data/lib/gruff/renderer/line.rb +10 -2
- data/lib/gruff/renderer/renderer.rb +7 -2
- data/lib/gruff/renderer/text.rb +11 -0
- data/lib/gruff/scatter.rb +20 -15
- data/lib/gruff/side_bar.rb +12 -10
- data/lib/gruff/side_stacked_bar.rb +6 -7
- data/lib/gruff/spider.rb +16 -11
- data/lib/gruff/stacked_area.rb +8 -2
- data/lib/gruff/stacked_bar.rb +6 -7
- data/lib/gruff/store/base_data.rb +4 -0
- data/lib/gruff/store/custom_data.rb +4 -0
- data/lib/gruff/store/store.rb +1 -1
- data/lib/gruff/store/xy_data.rb +4 -0
- data/lib/gruff/version.rb +1 -1
- metadata +2 -2
data/lib/gruff/renderer/line.rb
CHANGED
@@ -6,10 +6,18 @@ module Gruff
|
|
6
6
|
|
7
7
|
def initialize(args = {})
|
8
8
|
@color = args[:color]
|
9
|
+
@shadow_color = args[:shadow_color]
|
9
10
|
@width = args[:width]
|
10
11
|
end
|
11
12
|
|
12
13
|
def render(start_x, start_y, end_x, end_y)
|
14
|
+
render_line(start_x, start_y, end_x, end_y, @color)
|
15
|
+
render_line(start_x, start_y + 1, end_x, end_y + 1, @shadow_color) if @shadow_color
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def render_line(start_x, start_y, end_x, end_y, color)
|
13
21
|
# FIXME(uwe): Workaround for Issue #66
|
14
22
|
# https://github.com/topfunky/gruff/issues/66
|
15
23
|
# https://github.com/rmagick/rmagick/issues/82
|
@@ -24,8 +32,8 @@ module Gruff
|
|
24
32
|
draw = Renderer.instance.draw
|
25
33
|
|
26
34
|
draw.push
|
27
|
-
draw.stroke(
|
28
|
-
draw.fill(
|
35
|
+
draw.stroke(color)
|
36
|
+
draw.fill(color)
|
29
37
|
draw.stroke_width(@width) if @width
|
30
38
|
draw.line(start_x, start_y, end_x, end_y)
|
31
39
|
draw.pop
|
@@ -7,7 +7,7 @@ module Gruff
|
|
7
7
|
class Renderer
|
8
8
|
include Singleton
|
9
9
|
|
10
|
-
attr_accessor :draw, :image, :scale
|
10
|
+
attr_accessor :draw, :image, :scale, :text_renderers
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def setup(columns, rows, font, scale, theme_options)
|
@@ -21,6 +21,7 @@ module Gruff
|
|
21
21
|
Renderer.instance.draw = draw
|
22
22
|
Renderer.instance.scale = scale
|
23
23
|
Renderer.instance.image = image
|
24
|
+
Renderer.instance.text_renderers = []
|
24
25
|
end
|
25
26
|
|
26
27
|
def setup_transparent_background(columns, rows)
|
@@ -42,6 +43,10 @@ module Gruff
|
|
42
43
|
image = Renderer.instance.image
|
43
44
|
|
44
45
|
draw.draw(image)
|
46
|
+
|
47
|
+
Renderer.instance.text_renderers.each do |renderer|
|
48
|
+
renderer.render(renderer.width, renderer.height, renderer.x, renderer.y, renderer.gravity)
|
49
|
+
end
|
45
50
|
end
|
46
51
|
|
47
52
|
def write(file_name)
|
@@ -102,7 +107,7 @@ module Gruff
|
|
102
107
|
|
103
108
|
if @gradated_background_retry_count < 3
|
104
109
|
@gradated_background_retry_count += 1
|
105
|
-
gradated_background(top_color, bottom_color, direct)
|
110
|
+
gradated_background(columns, rows, top_color, bottom_color, direct)
|
106
111
|
else
|
107
112
|
raise e
|
108
113
|
end
|
data/lib/gruff/renderer/text.rb
CHANGED
@@ -11,6 +11,17 @@ module Gruff
|
|
11
11
|
@rotation = args[:rotation]
|
12
12
|
end
|
13
13
|
|
14
|
+
attr_reader :width, :height, :x, :y, :gravity
|
15
|
+
def add_to_render_queue(width, height, x, y, gravity = Magick::NorthGravity)
|
16
|
+
@width = width
|
17
|
+
@height = height
|
18
|
+
@x = x
|
19
|
+
@y = y
|
20
|
+
@gravity = gravity
|
21
|
+
|
22
|
+
Renderer.instance.text_renderers << self
|
23
|
+
end
|
24
|
+
|
14
25
|
def render(width, height, x, y, gravity = Magick::NorthGravity)
|
15
26
|
draw = Renderer.instance.draw
|
16
27
|
image = Renderer.instance.image
|
data/lib/gruff/scatter.rb
CHANGED
@@ -13,33 +13,38 @@ require 'gruff/base'
|
|
13
13
|
class Gruff::Scatter < Gruff::Base
|
14
14
|
# Maximum X Value. The value will get overwritten by the max in the
|
15
15
|
# datasets.
|
16
|
-
|
16
|
+
attr_writer :maximum_x_value
|
17
17
|
|
18
18
|
# Minimum X Value. The value will get overwritten by the min in the
|
19
19
|
# datasets.
|
20
|
-
|
20
|
+
attr_writer :minimum_x_value
|
21
21
|
|
22
22
|
# The number of vertical lines shown for reference.
|
23
|
-
|
23
|
+
attr_writer :marker_x_count
|
24
24
|
|
25
25
|
# Attributes to allow customising the size of the points.
|
26
|
-
|
27
|
-
|
26
|
+
attr_writer :circle_radius
|
27
|
+
attr_writer :stroke_width
|
28
28
|
|
29
29
|
# Allow disabling the significant rounding when labeling the X axis.
|
30
30
|
# This is useful when working with a small range of high values (for example, a date range of months, while seconds as units).
|
31
|
-
|
31
|
+
attr_writer :disable_significant_rounding_x_axis
|
32
32
|
|
33
33
|
# Allow enabling vertical lines. When you have a lot of data, they can work great.
|
34
|
-
|
34
|
+
attr_writer :enable_vertical_line_markers
|
35
35
|
|
36
36
|
# Allow using vertical labels in the X axis (and setting the label margin).
|
37
|
-
|
38
|
-
|
37
|
+
attr_writer :x_label_margin
|
38
|
+
attr_writer :use_vertical_x_labels
|
39
39
|
|
40
40
|
# Allow passing lambdas to format labels.
|
41
|
-
|
42
|
-
|
41
|
+
attr_writer :y_axis_label_format
|
42
|
+
attr_writer :x_axis_label_format
|
43
|
+
|
44
|
+
def initialize_store
|
45
|
+
@store = Gruff::Store.new(Gruff::Store::XYData)
|
46
|
+
end
|
47
|
+
private :initialize_store
|
43
48
|
|
44
49
|
def initialize_ivars
|
45
50
|
super
|
@@ -56,8 +61,6 @@ class Gruff::Scatter < Gruff::Base
|
|
56
61
|
@x_axis_label_format = nil
|
57
62
|
@x_label_margin = nil
|
58
63
|
@y_axis_label_format = nil
|
59
|
-
|
60
|
-
@store = Gruff::Store.new(Gruff::Store::XYData)
|
61
64
|
end
|
62
65
|
private :initialize_ivars
|
63
66
|
|
@@ -202,7 +205,9 @@ private
|
|
202
205
|
# TODO: Fix the vertical lines, and enable them by default. Not pretty when they don't match up with top y-axis line
|
203
206
|
if @enable_vertical_line_markers
|
204
207
|
x = @graph_left + @graph_width - index.to_f * increment_x_scaled
|
205
|
-
|
208
|
+
|
209
|
+
line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
|
210
|
+
line_renderer.render(x, @graph_top, x, @graph_bottom)
|
206
211
|
end
|
207
212
|
|
208
213
|
unless @hide_line_numbers
|
@@ -213,7 +218,7 @@ private
|
|
213
218
|
label = vertical_label(marker_label, @x_increment)
|
214
219
|
rotation = -90.0 if @use_vertical_x_labels
|
215
220
|
text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @marker_font_size, color: @font_color, rotation: rotation)
|
216
|
-
text_renderer.
|
221
|
+
text_renderer.add_to_render_queue(1.0, 1.0, x_offset, y_offset)
|
217
222
|
end
|
218
223
|
end
|
219
224
|
end
|
data/lib/gruff/side_bar.rb
CHANGED
@@ -22,21 +22,23 @@ require 'gruff/base'
|
|
22
22
|
#
|
23
23
|
class Gruff::SideBar < Gruff::Base
|
24
24
|
# Spacing factor applied between bars.
|
25
|
-
|
25
|
+
attr_writer :bar_spacing
|
26
26
|
|
27
27
|
# Spacing factor applied between a group of bars belonging to the same label.
|
28
|
-
|
28
|
+
attr_writer :group_spacing
|
29
29
|
|
30
30
|
# Set the number output format for labels using sprintf.
|
31
31
|
# Default is +"%.2f"+.
|
32
|
-
|
32
|
+
attr_writer :label_formatting
|
33
33
|
|
34
34
|
# Output the values for the bars on a bar graph.
|
35
35
|
# Default is +false+.
|
36
|
-
|
36
|
+
attr_writer :show_labels_for_bar_values
|
37
37
|
|
38
38
|
def initialize_ivars
|
39
39
|
super
|
40
|
+
@bar_spacing = 0.9
|
41
|
+
@group_spacing = 10
|
40
42
|
@label_formatting = nil
|
41
43
|
@show_labels_for_bar_values = false
|
42
44
|
end
|
@@ -56,9 +58,6 @@ private
|
|
56
58
|
def draw_bars
|
57
59
|
# Setup spacing.
|
58
60
|
#
|
59
|
-
@bar_spacing ||= 0.9
|
60
|
-
@group_spacing ||= 10
|
61
|
-
|
62
61
|
bars_width = (@graph_height - calculate_spacing) / column_count.to_f
|
63
62
|
bar_width = bars_width / store.length
|
64
63
|
height = Array.new(column_count, 0)
|
@@ -123,13 +122,16 @@ private
|
|
123
122
|
(0..number_of_lines).each do |index|
|
124
123
|
line_diff = (@graph_right - @graph_left) / number_of_lines
|
125
124
|
x = @graph_right - (line_diff * index) - 1
|
126
|
-
|
125
|
+
|
126
|
+
line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
|
127
|
+
line_renderer.render(x, @graph_bottom, x, @graph_top)
|
128
|
+
|
127
129
|
diff = index - number_of_lines
|
128
130
|
marker_label = diff.abs * increment + minimum_value
|
129
131
|
|
130
132
|
unless @hide_line_numbers
|
131
133
|
text_renderer = Gruff::Renderer::Text.new(marker_label, font: @font, size: @marker_font_size, color: @font_color)
|
132
|
-
text_renderer.
|
134
|
+
text_renderer.add_to_render_queue(0, 0, x, @graph_bottom + LABEL_MARGIN, Magick::CenterGravity)
|
133
135
|
end
|
134
136
|
end
|
135
137
|
end
|
@@ -142,7 +144,7 @@ private
|
|
142
144
|
lbl = @use_data_label ? label : @labels[index]
|
143
145
|
|
144
146
|
text_renderer = Gruff::Renderer::Text.new(lbl, font: @font, size: @marker_font_size, color: @font_color)
|
145
|
-
text_renderer.
|
147
|
+
text_renderer.add_to_render_queue(@graph_left - LABEL_MARGIN, 1.0, 0.0, y_offset, Magick::EastGravity)
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
@@ -27,21 +27,23 @@ class Gruff::SideStackedBar < Gruff::SideBar
|
|
27
27
|
include BarValueLabelMixin
|
28
28
|
|
29
29
|
# Spacing factor applied between bars.
|
30
|
-
|
30
|
+
attr_writer :bar_spacing
|
31
31
|
|
32
32
|
# Number of pixels between bar segments.
|
33
|
-
|
33
|
+
attr_writer :segment_spacing
|
34
34
|
|
35
35
|
# Set the number output format for labels using sprintf.
|
36
36
|
# Default is +"%.2f"+.
|
37
|
-
|
37
|
+
attr_writer :label_formatting
|
38
38
|
|
39
39
|
# Output the values for the bars on a bar graph.
|
40
40
|
# Default is +false+.
|
41
|
-
|
41
|
+
attr_writer :show_labels_for_bar_values
|
42
42
|
|
43
43
|
def initialize_ivars
|
44
44
|
super
|
45
|
+
@bar_spacing = 0.9
|
46
|
+
@segment_spacing = 2.0
|
45
47
|
@label_formatting = nil
|
46
48
|
@show_labels_for_bar_values = false
|
47
49
|
end
|
@@ -59,9 +61,6 @@ private
|
|
59
61
|
# Setup spacing.
|
60
62
|
#
|
61
63
|
# Columns sit stacked.
|
62
|
-
@bar_spacing ||= 0.9
|
63
|
-
@segment_spacing ||= 2.0
|
64
|
-
|
65
64
|
bar_width = @graph_height / column_count.to_f
|
66
65
|
height = Array.new(column_count, 0)
|
67
66
|
length = Array.new(column_count, @graph_left)
|
data/lib/gruff/spider.rb
CHANGED
@@ -18,10 +18,8 @@ require 'gruff/base'
|
|
18
18
|
|
19
19
|
class Gruff::Spider < Gruff::Base
|
20
20
|
# Hide all text.
|
21
|
-
|
22
|
-
|
23
|
-
attr_reader :transparent_background
|
24
|
-
attr_accessor :rotation
|
21
|
+
attr_writer :hide_axes
|
22
|
+
attr_writer :rotation
|
25
23
|
|
26
24
|
def transparent_background=(value)
|
27
25
|
Gruff::Renderer.setup_transparent_background(@columns, @rows) if value
|
@@ -34,9 +32,16 @@ class Gruff::Spider < Gruff::Base
|
|
34
32
|
def initialize(max_value, target_width = 800)
|
35
33
|
super(target_width)
|
36
34
|
@max_value = max_value
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize_ivars
|
38
|
+
super
|
37
39
|
@hide_legend = true
|
40
|
+
@hide_axes = false
|
41
|
+
@hide_text = false
|
38
42
|
@rotation = 0
|
39
43
|
end
|
44
|
+
private :initialize_ivars
|
40
45
|
|
41
46
|
def draw
|
42
47
|
@hide_line_markers = true
|
@@ -55,7 +60,7 @@ class Gruff::Spider < Gruff::Base
|
|
55
60
|
additive_angle = (2 * Math::PI) / store.length
|
56
61
|
|
57
62
|
# Draw axes
|
58
|
-
draw_axes(center_x, center_y, radius, additive_angle) unless hide_axes
|
63
|
+
draw_axes(center_x, center_y, radius, additive_angle) unless @hide_axes
|
59
64
|
|
60
65
|
# Draw polygon
|
61
66
|
draw_polygon(center_x, center_y, additive_angle)
|
@@ -77,14 +82,14 @@ private
|
|
77
82
|
y = y_offset + ((radius + r_offset) * Math.sin(angle))
|
78
83
|
|
79
84
|
# Draw label
|
80
|
-
text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: legend_font_size, color: @marker_color, weight: Magick::BoldWeight)
|
81
|
-
text_renderer.
|
85
|
+
text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: @legend_font_size, color: @marker_color, weight: Magick::BoldWeight)
|
86
|
+
text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
|
82
87
|
end
|
83
88
|
|
84
89
|
def draw_axes(center_x, center_y, radius, additive_angle, line_color = nil)
|
85
|
-
return if hide_axes
|
90
|
+
return if @hide_axes
|
86
91
|
|
87
|
-
current_angle = rotation * Math::PI / 180.0
|
92
|
+
current_angle = @rotation * Math::PI / 180.0
|
88
93
|
|
89
94
|
store.data.each do |data_row|
|
90
95
|
x_offset = radius * Math.cos(current_angle)
|
@@ -93,7 +98,7 @@ private
|
|
93
98
|
Gruff::Renderer::Line.new(color: line_color || data_row.color, width: 5.0)
|
94
99
|
.render(center_x, center_y, center_x + x_offset, center_y + y_offset)
|
95
100
|
|
96
|
-
draw_label(center_x, center_y, current_angle, radius, data_row.label.to_s) unless hide_text
|
101
|
+
draw_label(center_x, center_y, current_angle, radius, data_row.label.to_s) unless @hide_text
|
97
102
|
|
98
103
|
current_angle += additive_angle
|
99
104
|
end
|
@@ -101,7 +106,7 @@ private
|
|
101
106
|
|
102
107
|
def draw_polygon(center_x, center_y, additive_angle, color = nil)
|
103
108
|
points = []
|
104
|
-
current_angle = rotation * Math::PI / 180.0
|
109
|
+
current_angle = @rotation * Math::PI / 180.0
|
105
110
|
|
106
111
|
store.data.each do |data_row|
|
107
112
|
points << center_x + normalize_points(data_row.points.first) * Math.cos(current_angle)
|
data/lib/gruff/stacked_area.rb
CHANGED
@@ -15,7 +15,13 @@ require 'gruff/helper/stacked_mixin'
|
|
15
15
|
#
|
16
16
|
class Gruff::StackedArea < Gruff::Base
|
17
17
|
include StackedMixin
|
18
|
-
|
18
|
+
attr_writer :last_series_goes_on_bottom
|
19
|
+
|
20
|
+
def initialize_ivars
|
21
|
+
super
|
22
|
+
@last_series_goes_on_bottom = false
|
23
|
+
end
|
24
|
+
private :initialize_ivars
|
19
25
|
|
20
26
|
def draw
|
21
27
|
calculate_maximum_by_stack
|
@@ -28,7 +34,7 @@ class Gruff::StackedArea < Gruff::Base
|
|
28
34
|
height = Array.new(column_count, 0)
|
29
35
|
|
30
36
|
data_points = nil
|
31
|
-
iterator = last_series_goes_on_bottom ? :reverse_each : :each
|
37
|
+
iterator = @last_series_goes_on_bottom ? :reverse_each : :each
|
32
38
|
store.norm_data.public_send(iterator) do |data_row|
|
33
39
|
prev_data_points = data_points
|
34
40
|
data_points = []
|
data/lib/gruff/stacked_bar.rb
CHANGED
@@ -19,21 +19,23 @@ class Gruff::StackedBar < Gruff::Base
|
|
19
19
|
include BarValueLabelMixin
|
20
20
|
|
21
21
|
# Spacing factor applied between bars.
|
22
|
-
|
22
|
+
attr_writer :bar_spacing
|
23
23
|
|
24
24
|
# Number of pixels between bar segments.
|
25
|
-
|
25
|
+
attr_writer :segment_spacing
|
26
26
|
|
27
27
|
# Set the number output format for labels using sprintf.
|
28
28
|
# Default is +"%.2f"+.
|
29
|
-
|
29
|
+
attr_writer :label_formatting
|
30
30
|
|
31
31
|
# Output the values for the bars on a bar graph.
|
32
32
|
# Default is +false+.
|
33
|
-
|
33
|
+
attr_writer :show_labels_for_bar_values
|
34
34
|
|
35
35
|
def initialize_ivars
|
36
36
|
super
|
37
|
+
@bar_spacing = 0.9
|
38
|
+
@segment_spacing = 2
|
37
39
|
@label_formatting = nil
|
38
40
|
@show_labels_for_bar_values = false
|
39
41
|
end
|
@@ -48,9 +50,6 @@ class Gruff::StackedBar < Gruff::Base
|
|
48
50
|
# Setup spacing.
|
49
51
|
#
|
50
52
|
# Columns sit stacked.
|
51
|
-
@bar_spacing ||= 0.9
|
52
|
-
@segment_spacing ||= 2
|
53
|
-
|
54
53
|
bar_width = @graph_width / column_count.to_f
|
55
54
|
padding = (bar_width * (1 - @bar_spacing)) / 2
|
56
55
|
|
data/lib/gruff/store/store.rb
CHANGED
data/lib/gruff/store/xy_data.rb
CHANGED
data/lib/gruff/version.rb
CHANGED