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/bullet.rb
CHANGED
@@ -17,9 +17,7 @@ require 'gruff/themes'
|
|
17
17
|
class Gruff::Bullet < Gruff::Base
|
18
18
|
def initialize(target_width = '400x40')
|
19
19
|
if target_width.is_a?(String)
|
20
|
-
|
21
|
-
@columns = geometric_width.to_f
|
22
|
-
@rows = geometric_height.to_f
|
20
|
+
@columns, @rows = target_width.split('x').map(&:to_f)
|
23
21
|
else
|
24
22
|
@columns = target_width.to_f
|
25
23
|
@rows = target_width.to_f / 5.0
|
@@ -27,12 +25,19 @@ class Gruff::Bullet < Gruff::Base
|
|
27
25
|
@columns.freeze
|
28
26
|
@rows.freeze
|
29
27
|
|
28
|
+
initialize_graph_scale
|
30
29
|
initialize_ivars
|
30
|
+
initialize_store
|
31
31
|
|
32
|
-
reset_themes
|
33
32
|
self.theme = Gruff::Themes::GREYSCALE
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize_ivars
|
36
|
+
super
|
37
|
+
|
34
38
|
@title_font_size = 20
|
35
39
|
end
|
40
|
+
private :initialize_ivars
|
36
41
|
|
37
42
|
def data(value, maximum_value, options = {})
|
38
43
|
@value = value.to_f
|
@@ -55,7 +60,7 @@ class Gruff::Bullet < Gruff::Base
|
|
55
60
|
margin = 30.0
|
56
61
|
thickness = @raw_rows / 6.0
|
57
62
|
right_margin = margin
|
58
|
-
graph_left =
|
63
|
+
graph_left = [title_width * 1.3, margin].max
|
59
64
|
graph_width = @raw_columns - graph_left - right_margin
|
60
65
|
graph_height = thickness * 3.0
|
61
66
|
|
@@ -90,11 +95,11 @@ class Gruff::Bullet < Gruff::Base
|
|
90
95
|
private
|
91
96
|
|
92
97
|
def draw_title
|
93
|
-
return
|
98
|
+
return if hide_title?
|
94
99
|
|
95
100
|
font_height = calculate_caps_height(scale_fontsize(@title_font_size))
|
96
101
|
|
97
102
|
text_renderer = Gruff::Renderer::Text.new(@title, font: @font, size: @title_font_size, color: @font_color)
|
98
|
-
text_renderer.
|
103
|
+
text_renderer.add_to_render_queue(1.0, 1.0, font_height / 2, font_height / 2, Magick::NorthWestGravity)
|
99
104
|
end
|
100
105
|
end
|
data/lib/gruff/dot.rb
CHANGED
@@ -54,37 +54,17 @@ protected
|
|
54
54
|
def draw_line_markers
|
55
55
|
return if @hide_line_markers
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
increment = @y_axis_increment
|
60
|
-
number_of_lines = (@spread / @y_axis_increment).to_i
|
61
|
-
else
|
62
|
-
# Try to use a number of horizontal lines that will come out even.
|
63
|
-
#
|
64
|
-
# TODO Do the same for larger numbers...100, 75, 50, 25
|
65
|
-
if @marker_count.nil?
|
66
|
-
(3..7).each do |lines|
|
67
|
-
if @spread % lines == 0.0
|
68
|
-
@marker_count = lines
|
69
|
-
break
|
70
|
-
end
|
71
|
-
end
|
72
|
-
@marker_count ||= 5
|
73
|
-
end
|
74
|
-
# TODO: Round maximum marker value to a round number like 100, 0.1, 0.5, etc.
|
75
|
-
increment = (@spread > 0 && @marker_count > 0) ? significant(@spread / @marker_count) : 1
|
76
|
-
number_of_lines = @marker_count
|
77
|
-
end
|
78
|
-
|
79
|
-
(0..number_of_lines).each do |index|
|
80
|
-
marker_label = minimum_value + index * increment
|
57
|
+
(0..@marker_count).each do |index|
|
58
|
+
marker_label = minimum_value + index * @increment
|
81
59
|
x = @graph_left + (marker_label - minimum_value) * @graph_width / @spread
|
82
|
-
|
60
|
+
|
61
|
+
line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
|
62
|
+
line_renderer.render(x, @graph_bottom, x, @graph_bottom + 5)
|
83
63
|
|
84
64
|
unless @hide_line_numbers
|
85
|
-
label = label(marker_label, increment)
|
65
|
+
label = label(marker_label, @increment)
|
86
66
|
text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @marker_font_size, color: @font_color)
|
87
|
-
text_renderer.
|
67
|
+
text_renderer.add_to_render_queue(0, 0, x, @graph_bottom + (LABEL_MARGIN * 1.5), Magick::CenterGravity)
|
88
68
|
end
|
89
69
|
end
|
90
70
|
end
|
@@ -95,7 +75,7 @@ protected
|
|
95
75
|
def draw_label(y_offset, index)
|
96
76
|
draw_unique_label(index) do
|
97
77
|
text_renderer = Gruff::Renderer::Text.new(@labels[index], font: @font, size: @marker_font_size, color: @font_color)
|
98
|
-
text_renderer.
|
78
|
+
text_renderer.add_to_render_queue(@graph_left - LABEL_MARGIN, 1.0, 0.0, y_offset, Magick::EastGravity)
|
99
79
|
end
|
100
80
|
end
|
101
81
|
end
|
@@ -24,16 +24,16 @@ class Gruff::BarConversion
|
|
24
24
|
result = []
|
25
25
|
|
26
26
|
case @mode
|
27
|
-
when 1
|
28
|
-
|
27
|
+
when 1
|
28
|
+
# minimum value >= 0 ( only positive values )
|
29
29
|
result[0] = @graph_top + @graph_height * (1 - data_point) + 1
|
30
30
|
result[1] = @graph_top + @graph_height - 1
|
31
|
-
when 2
|
32
|
-
|
31
|
+
when 2
|
32
|
+
# only negative values
|
33
33
|
result[0] = @graph_top + 1
|
34
34
|
result[1] = @graph_top + @graph_height * (1 - data_point) - 1
|
35
|
-
when 3
|
36
|
-
|
35
|
+
when 3
|
36
|
+
# positive and negative values
|
37
37
|
val = data_point - @minimum_value / @spread
|
38
38
|
result[0] = @graph_top + @graph_height * (1 - (val - @zero)) + 1
|
39
39
|
result[1] = @graph_top + @graph_height * (1 - @zero) - 1
|
data/lib/gruff/histogram.rb
CHANGED
@@ -15,6 +15,20 @@ require 'gruff/base'
|
|
15
15
|
# g.write('histogram.png')
|
16
16
|
#
|
17
17
|
class Gruff::Histogram < Gruff::Bar
|
18
|
+
# Specifies interpolation between the min and max of the set. Default is +10+.
|
19
|
+
attr_writer :bin_width
|
20
|
+
|
21
|
+
# Specifies minimum value for bin.
|
22
|
+
attr_writer :minimum_bin
|
23
|
+
|
24
|
+
# Specifies maximum value for bin.
|
25
|
+
attr_writer :maximum_bin
|
26
|
+
|
27
|
+
def initialize(*)
|
28
|
+
super
|
29
|
+
@data = []
|
30
|
+
end
|
31
|
+
|
18
32
|
def initialize_ivars
|
19
33
|
super
|
20
34
|
@bin_width = 10
|
@@ -23,33 +37,20 @@ class Gruff::Histogram < Gruff::Bar
|
|
23
37
|
end
|
24
38
|
private :initialize_ivars
|
25
39
|
|
26
|
-
|
27
|
-
|
28
|
-
raise 'bin_width= should be called before set the data.' unless store.empty?
|
29
|
-
|
30
|
-
@bin_width = width
|
31
|
-
end
|
32
|
-
|
33
|
-
# Specifies minimum value for bin.
|
34
|
-
def minimum_bin=(min)
|
35
|
-
raise 'minimum_bin= should be called before set the data.' unless store.empty?
|
36
|
-
|
37
|
-
@minimum_bin = min
|
38
|
-
end
|
39
|
-
|
40
|
-
# Specifies maximum value for bin.
|
41
|
-
def maximum_bin=(max)
|
42
|
-
raise 'maximum_bin= should be called before set the data.' unless store.empty?
|
43
|
-
|
44
|
-
@maximum_bin = max
|
40
|
+
def data(name, data_points = [], color = nil)
|
41
|
+
@data << [name, data_points, color]
|
45
42
|
end
|
46
43
|
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
def draw
|
45
|
+
@data.each do |(name, data_points, color)|
|
46
|
+
bins, freqs = HistogramArray.new(data_points).histogram(bin_width: @bin_width, min: @minimum_bin, max: @maximum_bin)
|
47
|
+
bins.each_with_index do |bin, index|
|
48
|
+
@labels[index] = bin
|
49
|
+
end
|
50
|
+
store.add(name, freqs, color)
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
|
+
super
|
53
54
|
end
|
54
55
|
|
55
56
|
# @private
|
data/lib/gruff/line.rb
CHANGED
@@ -12,32 +12,32 @@ require 'gruff/base'
|
|
12
12
|
# g.write("line.png")
|
13
13
|
#
|
14
14
|
# There are also other options described below, such as {#baseline_value}, {#baseline_color},
|
15
|
-
# {#hide_dots}, and {#hide_lines}.
|
15
|
+
# {#hide_dots=}, and {#hide_lines=}.
|
16
16
|
#
|
17
17
|
class Gruff::Line < Gruff::Base
|
18
18
|
# Allow for reference lines ( which are like baseline ... just allowing for more & on both axes ).
|
19
19
|
attr_accessor :reference_lines
|
20
|
-
|
21
|
-
|
20
|
+
attr_writer :reference_line_default_color
|
21
|
+
attr_writer :reference_line_default_width
|
22
22
|
|
23
23
|
# Allow for vertical marker lines.
|
24
|
-
|
24
|
+
attr_writer :show_vertical_markers
|
25
25
|
|
26
26
|
# Dimensions of lines and dots; calculated based on dataset size if left unspecified.
|
27
|
-
|
28
|
-
|
27
|
+
attr_writer :line_width
|
28
|
+
attr_writer :dot_radius
|
29
29
|
|
30
30
|
# default is +'circle'+, other options include square.
|
31
|
-
|
31
|
+
attr_writer :dot_style
|
32
32
|
|
33
33
|
# Hide parts of the graph to fit more datapoints, or for a different appearance.
|
34
|
-
|
34
|
+
attr_writer :hide_dots, :hide_lines
|
35
35
|
|
36
36
|
# accessors for support of xy data.
|
37
|
-
|
37
|
+
attr_writer :minimum_x_value
|
38
38
|
|
39
39
|
# accessors for support of xy data.
|
40
|
-
|
40
|
+
attr_writer :maximum_x_value
|
41
41
|
|
42
42
|
# Get the value if somebody has defined it.
|
43
43
|
def baseline_value
|
@@ -69,7 +69,7 @@ class Gruff::Line < Gruff::Base
|
|
69
69
|
# g = Gruff::Line.new(400, false) # 400px wide, no lines (for backwards compatibility)
|
70
70
|
# g = Gruff::Line.new(false) # Defaults to 800px wide, no lines (for backwards compatibility)
|
71
71
|
#
|
72
|
-
# The preferred way is to call {#hide_dots} or {#hide_lines} instead.
|
72
|
+
# The preferred way is to call {#hide_dots=} or {#hide_lines=} instead.
|
73
73
|
def initialize(*args)
|
74
74
|
raise ArgumentError, 'Wrong number of arguments' if args.length > 2
|
75
75
|
|
@@ -78,7 +78,15 @@ class Gruff::Line < Gruff::Base
|
|
78
78
|
else
|
79
79
|
super args.shift
|
80
80
|
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def initialize_store
|
84
|
+
@store = Gruff::Store.new(Gruff::Store::XYData)
|
85
|
+
end
|
86
|
+
private :initialize_store
|
81
87
|
|
88
|
+
def initialize_ivars
|
89
|
+
super
|
82
90
|
@reference_lines = {}
|
83
91
|
@reference_line_default_color = 'red'
|
84
92
|
@reference_line_default_width = 5
|
@@ -87,12 +95,13 @@ class Gruff::Line < Gruff::Base
|
|
87
95
|
@maximum_x_value = nil
|
88
96
|
@minimum_x_value = nil
|
89
97
|
|
98
|
+
@line_width = nil
|
99
|
+
@dot_radius = nil
|
90
100
|
@dot_style = 'circle'
|
91
101
|
|
92
102
|
@show_vertical_markers = false
|
93
|
-
|
94
|
-
@store = Gruff::Store.new(Gruff::Store::XYData)
|
95
103
|
end
|
104
|
+
private :initialize_ivars
|
96
105
|
|
97
106
|
# This method allows one to plot a dataset with both X and Y data.
|
98
107
|
#
|
@@ -212,8 +221,8 @@ class Gruff::Line < Gruff::Base
|
|
212
221
|
new_y = @graph_top + (@graph_height - y_data * @graph_height)
|
213
222
|
|
214
223
|
# Reset each time to avoid thin-line errors
|
215
|
-
stroke_width = line_width || clip_value_if_greater_than(@columns / (store.norm_data.first.y_points.size * 4), 5.0)
|
216
|
-
circle_radius = dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.y_points.size * 2.5), 5.0)
|
224
|
+
stroke_width = @line_width || clip_value_if_greater_than(@columns / (store.norm_data.first.y_points.size * 4), 5.0)
|
225
|
+
circle_radius = @dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.y_points.size * 2.5), 5.0)
|
217
226
|
|
218
227
|
if !@hide_lines && prev_x && prev_y
|
219
228
|
Gruff::Renderer::Line.new(color: data_row.color, width: stroke_width)
|
data/lib/gruff/mini/legend.rb
CHANGED
@@ -67,7 +67,7 @@ module Gruff
|
|
67
67
|
# Draw label
|
68
68
|
label = truncate_legend_label(legend_label)
|
69
69
|
text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @legend_font_size, color: @font_color)
|
70
|
-
text_renderer.
|
70
|
+
text_renderer.add_to_render_queue(@raw_columns, 1.0, current_x_offset + (legend_square_width * 1.7), current_y_offset, Magick::WestGravity)
|
71
71
|
|
72
72
|
# Now draw box with color of this dataset
|
73
73
|
rect_renderer = Gruff::Renderer::Rectangle.new(color: store.data[index].color)
|
data/lib/gruff/net.rb
CHANGED
@@ -26,16 +26,18 @@ require 'gruff/base'
|
|
26
26
|
#
|
27
27
|
class Gruff::Net < Gruff::Base
|
28
28
|
# Hide parts of the graph to fit more datapoints, or for a different appearance.
|
29
|
-
|
29
|
+
attr_writer :hide_dots
|
30
30
|
|
31
31
|
# Dimensions of lines and dots; calculated based on dataset size if left unspecified.
|
32
|
-
|
33
|
-
|
32
|
+
attr_writer :line_width
|
33
|
+
attr_writer :dot_radius
|
34
34
|
|
35
35
|
def initialize_ivars
|
36
36
|
super
|
37
37
|
|
38
38
|
@hide_dots = false
|
39
|
+
@line_width = nil
|
40
|
+
@dot_radius = nil
|
39
41
|
@hide_line_numbers = true
|
40
42
|
@sorted_drawing = true
|
41
43
|
end
|
@@ -46,9 +48,6 @@ class Gruff::Net < Gruff::Base
|
|
46
48
|
|
47
49
|
return unless data_given?
|
48
50
|
|
49
|
-
stroke_width = line_width || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 4), 5.0)
|
50
|
-
circle_radius = dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 2.5), 5.0)
|
51
|
-
|
52
51
|
store.norm_data.each do |data_row|
|
53
52
|
data_row.points.each_with_index do |data_point, index|
|
54
53
|
next if data_point.nil?
|
@@ -65,9 +64,9 @@ class Gruff::Net < Gruff::Base
|
|
65
64
|
end_x = @center_x + Math.sin(next_rad_pos) * next_point_distance
|
66
65
|
end_y = @center_y - Math.cos(next_rad_pos) * next_point_distance
|
67
66
|
|
68
|
-
Gruff::Renderer::Line.new(color: data_row.color, width: stroke_width).render(start_x, start_y, end_x, end_y)
|
67
|
+
Gruff::Renderer::Line.new(color: data_row.color, width: @stroke_width).render(start_x, start_y, end_x, end_y)
|
69
68
|
|
70
|
-
Gruff::Renderer::Circle.new(color: data_row.color, width: stroke_width).render(start_x, start_y, start_x - circle_radius, start_y) unless @hide_dots
|
69
|
+
Gruff::Renderer::Circle.new(color: data_row.color, width: @stroke_width).render(start_x, start_y, start_x - @circle_radius, start_y) unless @hide_dots
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
@@ -80,8 +79,10 @@ private
|
|
80
79
|
super
|
81
80
|
|
82
81
|
@radius = @graph_height / 2.0
|
82
|
+
@circle_radius = @dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 2.5), 5.0)
|
83
|
+
@stroke_width = @line_width || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 4), 5.0)
|
83
84
|
@center_x = @graph_left + (@graph_width / 2.0)
|
84
|
-
@center_y = @graph_top + (@graph_height / 2.0)
|
85
|
+
@center_y = @graph_top + (@graph_height / 2.0) + 10
|
85
86
|
end
|
86
87
|
|
87
88
|
# the lines connecting in the center, with the first line vertical
|
@@ -95,20 +96,19 @@ private
|
|
95
96
|
Gruff::Renderer::Line.new(color: @marker_color)
|
96
97
|
.render(@center_x, @center_y, @center_x + Math.sin(rad_pos) * @radius, @center_y - Math.cos(rad_pos) * @radius)
|
97
98
|
|
98
|
-
marker_label = labels[index] ? labels[index].to_s : '000'
|
99
|
-
draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius, marker_label)
|
99
|
+
marker_label = @labels[index] ? @labels[index].to_s : '000'
|
100
|
+
draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius + @circle_radius, marker_label)
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
103
104
|
def draw_label(center_x, center_y, angle, radius, amount)
|
104
|
-
r_offset = 1.1
|
105
105
|
x_offset = center_x # + 15 # The label points need to be tweaked slightly
|
106
106
|
y_offset = center_y # + 0 # This one doesn't though
|
107
|
-
x = x_offset + (radius
|
108
|
-
y = y_offset - (radius
|
107
|
+
x = x_offset + (radius + LABEL_MARGIN) * Math.sin(deg2rad(angle))
|
108
|
+
y = y_offset - (radius + LABEL_MARGIN) * Math.cos(deg2rad(angle))
|
109
109
|
|
110
110
|
# Draw label
|
111
111
|
text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: 20, color: @marker_color, weight: Magick::BoldWeight)
|
112
|
-
text_renderer.
|
112
|
+
text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
|
113
113
|
end
|
114
114
|
end
|
data/lib/gruff/photo_bar.rb
CHANGED
@@ -7,22 +7,22 @@ require 'gruff/base'
|
|
7
7
|
# Doesn't work yet.
|
8
8
|
#
|
9
9
|
class Gruff::PhotoBar < Gruff::Base
|
10
|
-
# TODO
|
11
|
-
#
|
12
|
-
# define base and cap in yml
|
13
|
-
# allow for image directory to be located elsewhere
|
14
|
-
# more exact measurements for bar heights (go all the way to the bottom of the graph)
|
15
|
-
# option to tile images instead of use a single image
|
16
|
-
# drop base label a few px lower so photo bar graphs can have a base dropping over the lower marker line
|
17
|
-
#
|
10
|
+
# TODO
|
11
|
+
#
|
12
|
+
# define base and cap in yml
|
13
|
+
# allow for image directory to be located elsewhere
|
14
|
+
# more exact measurements for bar heights (go all the way to the bottom of the graph)
|
15
|
+
# option to tile images instead of use a single image
|
16
|
+
# drop base label a few px lower so photo bar graphs can have a base dropping over the lower marker line
|
17
|
+
#
|
18
18
|
|
19
19
|
# The name of a pre-packaged photo-based theme.
|
20
20
|
attr_reader :theme
|
21
21
|
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
22
|
+
# def initialize(target_width=800)
|
23
|
+
# super
|
24
|
+
# init_photo_bar_graphics()
|
25
|
+
# end
|
26
26
|
|
27
27
|
def draw
|
28
28
|
super
|
data/lib/gruff/pie.rb
CHANGED
@@ -29,35 +29,28 @@ class Gruff::Pie < Gruff::Base
|
|
29
29
|
attr_writer :text_offset_percentage
|
30
30
|
|
31
31
|
## Use values instead of percentages.
|
32
|
-
|
32
|
+
attr_writer :show_values_as_labels
|
33
|
+
|
34
|
+
def initialize_store
|
35
|
+
@store = Gruff::Store.new(Gruff::Store::CustomData)
|
36
|
+
end
|
37
|
+
private :initialize_store
|
33
38
|
|
34
39
|
def initialize_ivars
|
35
40
|
super
|
36
|
-
|
41
|
+
@zero_degree = 0.0
|
42
|
+
@hide_labels_less_than = 0.0
|
43
|
+
@text_offset_percentage = DEFAULT_TEXT_OFFSET_PERCENTAGE
|
37
44
|
@show_values_as_labels = false
|
38
|
-
|
39
|
-
@store = Gruff::Store.new(Gruff::Store::CustomData)
|
40
45
|
end
|
41
46
|
private :initialize_ivars
|
42
47
|
|
43
|
-
def zero_degree
|
44
|
-
@zero_degree ||= 0.0
|
45
|
-
end
|
46
|
-
|
47
|
-
def hide_labels_less_than
|
48
|
-
@hide_labels_less_than ||= 0.0
|
49
|
-
end
|
50
|
-
|
51
|
-
def text_offset_percentage
|
52
|
-
@text_offset_percentage ||= DEFAULT_TEXT_OFFSET_PERCENTAGE
|
53
|
-
end
|
54
|
-
|
55
48
|
def options
|
56
49
|
{
|
57
|
-
zero_degree: zero_degree,
|
58
|
-
hide_labels_less_than: hide_labels_less_than,
|
59
|
-
text_offset_percentage: text_offset_percentage,
|
60
|
-
show_values_as_labels: show_values_as_labels
|
50
|
+
zero_degree: @zero_degree,
|
51
|
+
hide_labels_less_than: @hide_labels_less_than,
|
52
|
+
text_offset_percentage: @text_offset_percentage,
|
53
|
+
show_values_as_labels: @show_values_as_labels
|
61
54
|
}
|
62
55
|
end
|
63
56
|
|
@@ -110,7 +103,7 @@ private
|
|
110
103
|
# Spatial Value-Related Methods
|
111
104
|
|
112
105
|
def chart_degrees
|
113
|
-
@chart_degrees ||= zero_degree
|
106
|
+
@chart_degrees ||= @zero_degree
|
114
107
|
end
|
115
108
|
|
116
109
|
attr_reader :graph_height
|
@@ -146,17 +139,17 @@ private
|
|
146
139
|
end
|
147
140
|
|
148
141
|
def radius_offset
|
149
|
-
radius + (radius * text_offset_percentage) + distance_from_center
|
142
|
+
radius + (radius * @text_offset_percentage) + distance_from_center
|
150
143
|
end
|
151
144
|
|
152
145
|
def ellipse_factor
|
153
|
-
radius_offset * text_offset_percentage
|
146
|
+
radius_offset * @text_offset_percentage
|
154
147
|
end
|
155
148
|
|
156
149
|
# Label-Related Methods
|
157
150
|
|
158
151
|
def process_label_for(slice)
|
159
|
-
if slice.percentage >= hide_labels_less_than
|
152
|
+
if slice.percentage >= @hide_labels_less_than
|
160
153
|
x, y = label_coordinates_for slice
|
161
154
|
|
162
155
|
draw_label(x, y, slice.label)
|
@@ -181,7 +174,7 @@ private
|
|
181
174
|
|
182
175
|
def draw_label(x, y, value)
|
183
176
|
text_renderer = Gruff::Renderer::Text.new(value, font: @font, size: @marker_font_size, color: @font_color, weight: Magick::BoldWeight)
|
184
|
-
text_renderer.
|
177
|
+
text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
|
185
178
|
end
|
186
179
|
|
187
180
|
# Helper Classes
|