gruff 0.7.0-java → 0.12.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 +5 -5
- data/{History.txt → CHANGELOG.md} +81 -25
- data/Gemfile +3 -1
- data/README.md +51 -23
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/gruff.gemspec +23 -13
- data/init.rb +2 -0
- data/lib/gruff.rb +33 -4
- data/lib/gruff/accumulator_bar.rb +17 -9
- data/lib/gruff/area.rb +31 -21
- data/lib/gruff/bar.rb +90 -46
- data/lib/gruff/base.rb +476 -710
- data/lib/gruff/bezier.rb +29 -18
- data/lib/gruff/bullet.rb +58 -71
- data/lib/gruff/dot.rb +35 -83
- data/lib/gruff/helper/bar_conversion.rb +47 -0
- data/lib/gruff/helper/bar_value_label_mixin.rb +33 -0
- data/lib/gruff/helper/stacked_mixin.rb +23 -0
- data/lib/gruff/histogram.rb +59 -0
- data/lib/gruff/line.rb +121 -199
- data/lib/gruff/mini/bar.rb +17 -10
- data/lib/gruff/mini/legend.rb +26 -38
- data/lib/gruff/mini/pie.rb +18 -13
- data/lib/gruff/mini/side_bar.rb +25 -12
- data/lib/gruff/net.rb +69 -83
- data/lib/gruff/patch/rmagick.rb +31 -0
- data/lib/gruff/patch/string.rb +13 -0
- data/lib/gruff/photo_bar.rb +36 -43
- data/lib/gruff/pie.rb +42 -103
- data/lib/gruff/renderer/bezier.rb +22 -0
- data/lib/gruff/renderer/circle.rb +22 -0
- data/lib/gruff/renderer/dash_line.rb +23 -0
- data/lib/gruff/renderer/dot.rb +40 -0
- data/lib/gruff/renderer/ellipse.rb +22 -0
- data/lib/gruff/renderer/line.rb +43 -0
- data/lib/gruff/renderer/polygon.rb +24 -0
- data/lib/gruff/renderer/polyline.rb +22 -0
- data/lib/gruff/renderer/rectangle.rb +20 -0
- data/lib/gruff/renderer/renderer.rb +120 -0
- data/lib/gruff/renderer/text.rb +57 -0
- data/lib/gruff/scatter.rb +128 -201
- data/lib/gruff/scene.rb +30 -41
- data/lib/gruff/side_bar.rb +100 -68
- data/lib/gruff/side_stacked_bar.rb +92 -63
- data/lib/gruff/spider.rb +47 -53
- data/lib/gruff/stacked_area.rb +37 -34
- data/lib/gruff/stacked_bar.rb +99 -54
- data/lib/gruff/store/basic_data.rb +36 -0
- data/lib/gruff/store/custom_data.rb +36 -0
- data/lib/gruff/store/store.rb +81 -0
- data/lib/gruff/store/xy_data.rb +58 -0
- data/lib/gruff/themes.rb +32 -33
- data/lib/gruff/version.rb +3 -1
- metadata +74 -102
- data/.gitignore +0 -7
- data/.travis.yml +0 -19
- data/Manifest.txt +0 -81
- data/RELEASE.md +0 -30
- data/Rakefile +0 -218
- data/assets/bubble.png +0 -0
- data/assets/city_scene/background/0000.png +0 -0
- data/assets/city_scene/background/0600.png +0 -0
- data/assets/city_scene/background/2000.png +0 -0
- data/assets/city_scene/clouds/cloudy.png +0 -0
- data/assets/city_scene/clouds/partly_cloudy.png +0 -0
- data/assets/city_scene/clouds/stormy.png +0 -0
- data/assets/city_scene/grass/default.png +0 -0
- data/assets/city_scene/haze/true.png +0 -0
- data/assets/city_scene/number_sample/1.png +0 -0
- data/assets/city_scene/number_sample/2.png +0 -0
- data/assets/city_scene/number_sample/default.png +0 -0
- data/assets/city_scene/sky/0000.png +0 -0
- data/assets/city_scene/sky/0200.png +0 -0
- data/assets/city_scene/sky/0400.png +0 -0
- data/assets/city_scene/sky/0600.png +0 -0
- data/assets/city_scene/sky/0800.png +0 -0
- data/assets/city_scene/sky/1000.png +0 -0
- data/assets/city_scene/sky/1200.png +0 -0
- data/assets/city_scene/sky/1400.png +0 -0
- data/assets/city_scene/sky/1500.png +0 -0
- data/assets/city_scene/sky/1700.png +0 -0
- data/assets/city_scene/sky/2000.png +0 -0
- data/assets/pc306715.jpg +0 -0
- data/lib/gruff/bar_conversion.rb +0 -46
- data/lib/gruff/deprecated.rb +0 -39
- data/lib/gruff/stacked_mixin.rb +0 -23
- data/test/gruff_test_case.rb +0 -152
- data/test/image_compare.rb +0 -58
- data/test/test_accumulator_bar.rb +0 -51
- data/test/test_area.rb +0 -134
- data/test/test_bar.rb +0 -505
- data/test/test_base.rb +0 -33
- data/test/test_bezier.rb +0 -33
- data/test/test_bullet.rb +0 -26
- data/test/test_dot.rb +0 -263
- data/test/test_labels_for_null_data.rb +0 -27
- data/test/test_legend.rb +0 -68
- data/test/test_line.rb +0 -674
- data/test/test_mini_bar.rb +0 -33
- data/test/test_mini_pie.rb +0 -25
- data/test/test_mini_side_bar.rb +0 -36
- data/test/test_net.rb +0 -231
- data/test/test_photo.rb +0 -41
- data/test/test_pie.rb +0 -194
- data/test/test_scatter.rb +0 -270
- data/test/test_scene.rb +0 -100
- data/test/test_side_bar.rb +0 -56
- data/test/test_sidestacked_bar.rb +0 -105
- data/test/test_spider.rb +0 -226
- data/test/test_stacked_area.rb +0 -52
- data/test/test_stacked_bar.rb +0 -68
data/lib/gruff/mini/bar.rb
CHANGED
@@ -1,26 +1,36 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Makes a small bar graph suitable for display at 200px or even smaller.
|
4
5
|
#
|
6
|
+
# Here's how to set up a Gruff::Mini::Bar.
|
7
|
+
#
|
8
|
+
# g = Gruff::Mini::Bar.new
|
9
|
+
# g.title = 'Mini Bar Graph'
|
10
|
+
# g.data :Art, [0, 5, 8, 15]
|
11
|
+
# g.data :Philosophy, [10, 3, 2, 8]
|
12
|
+
# g.data :Science, [2, 15, 8, 11]
|
13
|
+
# g.write('mini_bar.png')
|
14
|
+
#
|
5
15
|
module Gruff
|
6
16
|
module Mini
|
7
|
-
|
17
|
+
# A class for drawing a small bar graph.
|
8
18
|
class Bar < Gruff::Bar
|
9
|
-
|
10
19
|
include Gruff::Mini::Legend
|
11
|
-
|
20
|
+
|
12
21
|
def initialize_ivars
|
13
22
|
super
|
14
|
-
|
23
|
+
|
15
24
|
@hide_legend = true
|
16
25
|
@hide_title = true
|
17
26
|
@hide_line_numbers = true
|
18
27
|
|
19
28
|
@marker_font_size = 50.0
|
20
|
-
@minimum_value = 0.0
|
21
|
-
@maximum_value = 0.0
|
22
29
|
@legend_font_size = 60.0
|
30
|
+
|
31
|
+
@minimum_value = 0.0
|
23
32
|
end
|
33
|
+
private :initialize_ivars
|
24
34
|
|
25
35
|
def draw
|
26
36
|
expand_canvas_for_vertical_legend
|
@@ -28,10 +38,7 @@ module Gruff
|
|
28
38
|
super
|
29
39
|
|
30
40
|
draw_vertical_legend
|
31
|
-
@d.draw(@base_image)
|
32
41
|
end
|
33
|
-
|
34
42
|
end
|
35
|
-
|
36
43
|
end
|
37
44
|
end
|
data/lib/gruff/mini/legend.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Gruff
|
2
4
|
module Mini
|
5
|
+
# A module to handle the small legend.
|
3
6
|
module Legend
|
4
|
-
|
5
7
|
attr_accessor :hide_mini_legend, :legend_position
|
6
8
|
|
7
9
|
def initialize(*)
|
@@ -16,23 +18,22 @@ module Gruff
|
|
16
18
|
def expand_canvas_for_vertical_legend
|
17
19
|
return if @hide_mini_legend
|
18
20
|
|
19
|
-
@legend_labels =
|
21
|
+
@legend_labels = store.data.map(&:label)
|
20
22
|
|
21
|
-
legend_height = scale_fontsize(
|
22
|
-
@data.length * calculate_line_height +
|
23
|
-
@top_margin + @bottom_margin)
|
23
|
+
legend_height = scale_fontsize(store.length * calculate_line_height + @top_margin + @bottom_margin)
|
24
24
|
|
25
25
|
@original_rows = @raw_rows
|
26
26
|
@original_columns = @raw_columns
|
27
27
|
|
28
28
|
case @legend_position
|
29
|
-
when :right
|
29
|
+
when :right
|
30
30
|
@rows = [@rows, legend_height].max
|
31
31
|
@columns += calculate_legend_width + @left_margin
|
32
32
|
else
|
33
|
-
@rows +=
|
33
|
+
@rows += store.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
|
+
Gruff::Renderer.setup(@columns, @rows, @font, @scale, @theme_options)
|
36
37
|
end
|
37
38
|
|
38
39
|
def calculate_line_height
|
@@ -41,7 +42,7 @@ module Gruff
|
|
41
42
|
|
42
43
|
def calculate_legend_width
|
43
44
|
width = @legend_labels.map { |label| calculate_width(@legend_font_size, label) }.max
|
44
|
-
scale_fontsize(width + 40*1.7)
|
45
|
+
scale_fontsize(width + 40 * 1.7)
|
45
46
|
end
|
46
47
|
|
47
48
|
##
|
@@ -54,12 +55,8 @@ module Gruff
|
|
54
55
|
@legend_left_margin = 100.0
|
55
56
|
legend_top_margin = 40.0
|
56
57
|
|
57
|
-
# May fix legend drawing problem at small sizes
|
58
|
-
@d.font = @font if @font
|
59
|
-
@d.pointsize = @legend_font_size
|
60
|
-
|
61
58
|
case @legend_position
|
62
|
-
when :right
|
59
|
+
when :right
|
63
60
|
current_x_offset = @original_columns + @left_margin
|
64
61
|
current_y_offset = @top_margin + legend_top_margin
|
65
62
|
else
|
@@ -67,33 +64,22 @@ module Gruff
|
|
67
64
|
current_y_offset = @original_rows + legend_top_margin
|
68
65
|
end
|
69
66
|
|
70
|
-
debug { @d.line 0.0, current_y_offset, @raw_columns, current_y_offset }
|
71
|
-
|
72
67
|
@legend_labels.each_with_index do |legend_label, index|
|
73
|
-
|
74
68
|
# Draw label
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
@
|
79
|
-
@d.font_weight = Magick::NormalWeight
|
80
|
-
@d.gravity = Magick::WestGravity
|
81
|
-
@d = @d.annotate_scaled( @base_image,
|
82
|
-
@raw_columns, 1.0,
|
83
|
-
current_x_offset + (legend_square_width * 1.7), current_y_offset,
|
84
|
-
truncate_legend_label(legend_label), @scale)
|
69
|
+
label = truncate_legend_label(legend_label)
|
70
|
+
text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @legend_font_size, color: @font_color)
|
71
|
+
x_offset = current_x_offset + (legend_square_width * 1.7)
|
72
|
+
text_renderer.add_to_render_queue(@raw_columns, 1.0, x_offset, current_y_offset, Magick::WestGravity)
|
85
73
|
|
86
74
|
# Now draw box with color of this dataset
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
current_y_offset + legend_square_width / 2.0)
|
75
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(color: store.data[index].color)
|
76
|
+
rect_renderer.render(current_x_offset,
|
77
|
+
current_y_offset - legend_square_width / 2.0,
|
78
|
+
current_x_offset + legend_square_width,
|
79
|
+
current_y_offset + legend_square_width / 2.0)
|
93
80
|
|
94
81
|
current_y_offset += calculate_line_height
|
95
82
|
end
|
96
|
-
@color_index = 0
|
97
83
|
end
|
98
84
|
|
99
85
|
##
|
@@ -103,12 +89,14 @@ module Gruff
|
|
103
89
|
|
104
90
|
def truncate_legend_label(label)
|
105
91
|
truncated_label = label.to_s
|
106
|
-
|
107
|
-
|
92
|
+
|
93
|
+
font_size = scale_fontsize(@legend_font_size)
|
94
|
+
max_width = @columns - @legend_left_margin - @right_margin
|
95
|
+
while calculate_width(font_size, truncated_label) > max_width && truncated_label.length > 1
|
96
|
+
truncated_label = truncated_label[0..truncated_label.length - 2]
|
108
97
|
end
|
109
|
-
truncated_label + (truncated_label.length < label.to_s.length ?
|
98
|
+
truncated_label + (truncated_label.length < label.to_s.length ? '...' : '')
|
110
99
|
end
|
111
|
-
|
112
100
|
end
|
113
101
|
end
|
114
102
|
end
|
data/lib/gruff/mini/pie.rb
CHANGED
@@ -1,36 +1,41 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Makes a small pie graph suitable for display at 200px or even smaller.
|
4
5
|
#
|
6
|
+
# Here's how to set up a Gruff::Mini::Pie.
|
7
|
+
#
|
8
|
+
# g = Gruff::Mini::Pie.new
|
9
|
+
# g.title = "Visual Pie Graph Test"
|
10
|
+
# g.data 'Fries', 20
|
11
|
+
# g.data 'Hamburgers', 50
|
12
|
+
# g.write("mini_pie_keynote.png")
|
13
|
+
#
|
5
14
|
module Gruff
|
6
15
|
module Mini
|
7
|
-
|
16
|
+
# A class for drawing a small pie graph.
|
8
17
|
class Pie < Gruff::Pie
|
9
|
-
|
10
18
|
include Gruff::Mini::Legend
|
11
19
|
|
12
20
|
def initialize_ivars
|
13
21
|
super
|
14
|
-
|
22
|
+
|
15
23
|
@hide_legend = true
|
16
24
|
@hide_title = true
|
17
25
|
@hide_line_numbers = true
|
18
|
-
|
26
|
+
|
19
27
|
@marker_font_size = 60.0
|
20
28
|
@legend_font_size = 60.0
|
21
29
|
end
|
30
|
+
private :initialize_ivars
|
22
31
|
|
23
32
|
def draw
|
24
33
|
expand_canvas_for_vertical_legend
|
25
|
-
|
34
|
+
|
26
35
|
super
|
27
|
-
|
28
|
-
draw_vertical_legend
|
29
|
-
|
30
|
-
@d.draw(@base_image)
|
31
|
-
end # def draw
|
32
36
|
|
33
|
-
|
34
|
-
|
37
|
+
draw_vertical_legend
|
38
|
+
end
|
39
|
+
end
|
35
40
|
end
|
36
41
|
end
|
data/lib/gruff/mini/side_bar.rb
CHANGED
@@ -1,14 +1,30 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Makes a small side bar graph suitable for display at 200px or even smaller.
|
5
|
+
#
|
6
|
+
# Here's how to set up a Gruff::Mini::SideBar.
|
2
7
|
#
|
3
|
-
#
|
8
|
+
# g = Gruff::Mini::SideBar.new
|
9
|
+
# g.title = 'SideBar Graph'
|
10
|
+
# g.labels = {
|
11
|
+
# 0 => '5/6',
|
12
|
+
# 1 => '5/15',
|
13
|
+
# 2 => '5/24',
|
14
|
+
# 3 => '5/30',
|
15
|
+
# }
|
16
|
+
# g.group_spacing = 20
|
17
|
+
# g.data :Art, [0, 5, 8, 15]
|
18
|
+
# g.data :Philosophy, [10, 3, 2, 8]
|
19
|
+
# g.data :Science, [2, 15, 8, 11]
|
20
|
+
# g.write('mini_sidebar.png')
|
4
21
|
#
|
5
22
|
module Gruff
|
6
23
|
module Mini
|
7
|
-
|
24
|
+
# A class for drawing a small side bar graph.
|
8
25
|
class SideBar < Gruff::SideBar
|
9
|
-
|
10
26
|
include Gruff::Mini::Legend
|
11
|
-
|
27
|
+
|
12
28
|
def initialize_ivars
|
13
29
|
super
|
14
30
|
@hide_legend = true
|
@@ -18,18 +34,15 @@ module Gruff
|
|
18
34
|
@marker_font_size = 50.0
|
19
35
|
@legend_font_size = 50.0
|
20
36
|
end
|
21
|
-
|
37
|
+
private :initialize_ivars
|
38
|
+
|
22
39
|
def draw
|
23
40
|
expand_canvas_for_vertical_legend
|
24
|
-
|
41
|
+
|
25
42
|
super
|
26
|
-
|
43
|
+
|
27
44
|
draw_vertical_legend
|
28
|
-
|
29
|
-
@d.draw(@base_image)
|
30
45
|
end
|
31
|
-
|
32
46
|
end
|
33
|
-
|
34
47
|
end
|
35
48
|
end
|
data/lib/gruff/net.rb
CHANGED
@@ -1,127 +1,113 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# See also the Spider graph.
|
4
|
+
#
|
5
|
+
# Here's how to make a Gruff::Net.
|
6
|
+
#
|
7
|
+
# g = Gruff::Net.new
|
8
|
+
# g.title = "Net Graph"
|
9
|
+
# g.labels = {
|
10
|
+
# 0 => '5/6',
|
11
|
+
# 1 => '5/15',
|
12
|
+
# 2 => '5/24',
|
13
|
+
# 3 => '5/30',
|
14
|
+
# 4 => '6/4',
|
15
|
+
# 5 => '6/12',
|
16
|
+
# 6 => '6/21',
|
17
|
+
# 7 => '6/28'
|
18
|
+
# }
|
19
|
+
# g.line_width = 3
|
20
|
+
# g.dot_radius = 4
|
21
|
+
# g.data :Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]
|
22
|
+
# g.data :Julie, [22, 29, 35, 38, 36, 40, 46, 57]
|
23
|
+
# g.write("net.png")
|
24
|
+
#
|
4
25
|
class Gruff::Net < Gruff::Base
|
26
|
+
# Hide parts of the graph to fit more data points, or for a different appearance.
|
27
|
+
attr_writer :hide_dots
|
5
28
|
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
# Dimensions of lines and dots; calculated based on dataset size if left unspecified
|
10
|
-
attr_accessor :line_width
|
11
|
-
attr_accessor :dot_radius
|
29
|
+
# Dimensions of lines and dots; calculated based on dataset size if left unspecified.
|
30
|
+
attr_writer :line_width
|
31
|
+
attr_writer :dot_radius
|
12
32
|
|
13
|
-
def
|
33
|
+
def initialize_ivars
|
14
34
|
super
|
15
35
|
|
16
36
|
@hide_dots = false
|
37
|
+
@line_width = nil
|
38
|
+
@dot_radius = nil
|
17
39
|
@hide_line_numbers = true
|
18
40
|
@sorted_drawing = true
|
19
41
|
end
|
42
|
+
private :initialize_ivars
|
20
43
|
|
21
44
|
def draw
|
22
45
|
super
|
23
46
|
|
24
|
-
return unless
|
25
|
-
|
26
|
-
@radius = @graph_height / 2.0
|
27
|
-
@center_x = @graph_left + (@graph_width / 2.0)
|
28
|
-
@center_y = @graph_top + (@graph_height / 2.0) - 10 # Move graph up a bit
|
29
|
-
|
30
|
-
@x_increment = @graph_width / (@column_count - 1).to_f
|
31
|
-
circle_radius = dot_radius ||
|
32
|
-
clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 2.5), 5.0)
|
33
|
-
|
34
|
-
@d = @d.stroke_opacity 1.0
|
35
|
-
@d = @d.stroke_width line_width ||
|
36
|
-
clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 4), 5.0)
|
37
|
-
|
38
|
-
if defined?(@norm_baseline)
|
39
|
-
level = @graph_top + (@graph_height - @norm_baseline * @graph_height)
|
40
|
-
@d = @d.push
|
41
|
-
@d.stroke_color @baseline_color
|
42
|
-
@d.fill_opacity 0.0
|
43
|
-
@d.stroke_dasharray(10, 20)
|
44
|
-
@d.stroke_width 5
|
45
|
-
@d.line(@graph_left, level, @graph_left + @graph_width, level)
|
46
|
-
@d = @d.pop
|
47
|
-
end
|
48
|
-
|
49
|
-
@norm_data.each do |data_row|
|
50
|
-
@d = @d.stroke data_row[DATA_COLOR_INDEX]
|
51
|
-
@d = @d.fill data_row[DATA_COLOR_INDEX]
|
47
|
+
return unless data_given?
|
52
48
|
|
53
|
-
|
49
|
+
store.norm_data.each do |data_row|
|
50
|
+
data_row.points.each_with_index do |data_point, index|
|
54
51
|
next if data_point.nil?
|
55
52
|
|
56
|
-
rad_pos = index * Math::PI * 2 /
|
53
|
+
rad_pos = index * Math::PI * 2 / column_count
|
57
54
|
point_distance = data_point * @radius
|
58
|
-
start_x = @center_x + Math
|
59
|
-
start_y = @center_y - Math
|
55
|
+
start_x = @center_x + Math.sin(rad_pos) * point_distance
|
56
|
+
start_y = @center_y - Math.cos(rad_pos) * point_distance
|
60
57
|
|
61
|
-
next_index = index + 1 < data_row
|
58
|
+
next_index = index + 1 < data_row.points.length ? index + 1 : 0
|
62
59
|
|
63
|
-
next_rad_pos = next_index * Math::PI * 2 /
|
64
|
-
next_point_distance = data_row[
|
65
|
-
end_x = @center_x + Math
|
66
|
-
end_y = @center_y - Math
|
60
|
+
next_rad_pos = next_index * Math::PI * 2 / column_count
|
61
|
+
next_point_distance = data_row.points[next_index] * @radius
|
62
|
+
end_x = @center_x + Math.sin(next_rad_pos) * next_point_distance
|
63
|
+
end_y = @center_y - Math.cos(next_rad_pos) * next_point_distance
|
67
64
|
|
68
|
-
|
65
|
+
Gruff::Renderer::Line.new(color: data_row.color, width: @stroke_width).render(start_x, start_y, end_x, end_y)
|
69
66
|
|
70
|
-
|
67
|
+
unless @hide_dots
|
68
|
+
circle_renderer = Gruff::Renderer::Circle.new(color: data_row.color, width: @stroke_width)
|
69
|
+
circle_renderer.render(start_x, start_y, start_x - @circle_radius, start_y)
|
70
|
+
end
|
71
71
|
end
|
72
|
-
|
73
72
|
end
|
74
|
-
|
75
|
-
@d.draw(@base_image)
|
76
73
|
end
|
77
74
|
|
75
|
+
private
|
78
76
|
|
79
|
-
|
80
|
-
|
81
|
-
return if @hide_line_markers
|
82
|
-
|
77
|
+
def setup_drawing
|
78
|
+
super
|
83
79
|
|
84
|
-
# have to do this here (AGAIN)... see draw() in this class
|
85
|
-
# because this funtion is called before the @radius, @center_x and @center_y are set
|
86
80
|
@radius = @graph_height / 2.0
|
81
|
+
@circle_radius = @dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 2.5), 5.0)
|
82
|
+
@stroke_width = @line_width || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 4), 5.0)
|
87
83
|
@center_x = @graph_left + (@graph_width / 2.0)
|
88
|
-
@center_y = @graph_top + (@graph_height / 2.0)
|
84
|
+
@center_y = @graph_top + (@graph_height / 2.0) + 10
|
85
|
+
end
|
89
86
|
|
87
|
+
# the lines connecting in the center, with the first line vertical
|
88
|
+
def draw_line_markers
|
89
|
+
return if @hide_line_markers
|
90
90
|
|
91
91
|
# Draw horizontal line markers and annotate with numbers
|
92
|
-
|
93
|
-
|
92
|
+
(0..column_count - 1).each do |index|
|
93
|
+
rad_pos = index * Math::PI * 2 / column_count
|
94
94
|
|
95
|
+
Gruff::Renderer::Line.new(color: @marker_color)
|
96
|
+
.render(@center_x, @center_y, @center_x + Math.sin(rad_pos) * @radius, @center_y - Math.cos(rad_pos) * @radius)
|
95
97
|
|
96
|
-
|
97
|
-
rad_pos
|
98
|
-
|
99
|
-
@d = @d.line(@center_x, @center_y, @center_x + Math::sin(rad_pos) * @radius, @center_y - Math::cos(rad_pos) * @radius)
|
100
|
-
|
101
|
-
|
102
|
-
marker_label = labels[index] ? labels[index].to_s : '000'
|
103
|
-
|
104
|
-
draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius, marker_label)
|
98
|
+
marker_label = @labels[index] ? @labels[index].to_s : '000'
|
99
|
+
draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius + @circle_radius, marker_label)
|
105
100
|
end
|
106
101
|
end
|
107
102
|
|
108
|
-
private
|
109
|
-
|
110
103
|
def draw_label(center_x, center_y, angle, radius, amount)
|
111
|
-
r_offset = 1.1
|
112
104
|
x_offset = center_x # + 15 # The label points need to be tweaked slightly
|
113
105
|
y_offset = center_y # + 0 # This one doesn't though
|
114
|
-
x = x_offset + (radius
|
115
|
-
y = y_offset - (radius
|
106
|
+
x = x_offset + (radius + LABEL_MARGIN) * Math.sin(deg2rad(angle))
|
107
|
+
y = y_offset - (radius + LABEL_MARGIN) * Math.cos(deg2rad(angle))
|
116
108
|
|
117
109
|
# Draw label
|
118
|
-
|
119
|
-
|
120
|
-
@d.pointsize = scale_fontsize(20)
|
121
|
-
@d.stroke = 'transparent'
|
122
|
-
@d.font_weight = BoldWeight
|
123
|
-
@d.gravity = CenterGravity
|
124
|
-
@d.annotate_scaled(@base_image, 0, 0, x, y, amount, @scale)
|
110
|
+
text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: 20, color: @marker_color, weight: Magick::BoldWeight)
|
111
|
+
text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
|
125
112
|
end
|
126
|
-
|
127
113
|
end
|