gruff 0.29.0-java → 0.30.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/.github/dependabot.yml +6 -0
- data/.github/workflows/ci.yml +19 -26
- data/.rubocop.yml +15 -0
- data/.rubocop_todo.yml +11 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +2 -0
- data/gruff.gemspec +1 -0
- data/init.rb +1 -0
- data/lib/gruff/accumulator_bar.rb +1 -0
- data/lib/gruff/area.rb +2 -0
- data/lib/gruff/bar.rb +5 -0
- data/lib/gruff/base.rb +59 -2
- data/lib/gruff/bezier.rb +1 -0
- data/lib/gruff/box.rb +8 -0
- data/lib/gruff/bubble.rb +4 -0
- data/lib/gruff/bullet.rb +4 -0
- data/lib/gruff/candlestick.rb +20 -8
- data/lib/gruff/dot.rb +4 -0
- data/lib/gruff/font.rb +2 -0
- data/lib/gruff/helper/bar_value_label.rb +2 -0
- data/lib/gruff/helper/stacked_mixin.rb +1 -0
- data/lib/gruff/histogram.rb +3 -0
- data/lib/gruff/line.rb +28 -0
- data/lib/gruff/mini/bar.rb +4 -0
- data/lib/gruff/mini/legend.rb +15 -3
- data/lib/gruff/mini/pie.rb +4 -0
- data/lib/gruff/mini/side_bar.rb +4 -0
- data/lib/gruff/net.rb +7 -1
- data/lib/gruff/patch/rmagick.rb +11 -0
- data/lib/gruff/patch/string.rb +3 -0
- data/lib/gruff/pie.rb +8 -0
- data/lib/gruff/renderer/bezier.rb +1 -0
- data/lib/gruff/renderer/circle.rb +1 -0
- data/lib/gruff/renderer/dash_line.rb +1 -0
- data/lib/gruff/renderer/dot.rb +13 -0
- data/lib/gruff/renderer/ellipse.rb +1 -0
- data/lib/gruff/renderer/line.rb +7 -0
- data/lib/gruff/renderer/polygon.rb +2 -0
- data/lib/gruff/renderer/polyline.rb +1 -0
- data/lib/gruff/renderer/rectangle.rb +1 -0
- data/lib/gruff/renderer/renderer.rb +26 -3
- data/lib/gruff/renderer/text.rb +5 -1
- data/lib/gruff/scatter.rb +17 -0
- data/lib/gruff/side_bar.rb +9 -0
- data/lib/gruff/side_stacked_bar.rb +3 -0
- data/lib/gruff/spider.rb +26 -2
- data/lib/gruff/stacked_area.rb +5 -0
- data/lib/gruff/stacked_bar.rb +5 -0
- data/lib/gruff/store/basic_data.rb +4 -0
- data/lib/gruff/store/store.rb +8 -0
- data/lib/gruff/store/xy_data.rb +2 -0
- data/lib/gruff/store/xy_pointsizes_data.rb +2 -0
- data/lib/gruff/version.rb +1 -1
- data/lib/gruff.rb +2 -0
- data/sig/generated/gruff/accumulator_bar.rbs +2 -1
- data/sig/generated/gruff/area.rbs +4 -2
- data/sig/generated/gruff/bar.rbs +10 -5
- data/sig/generated/gruff/base.rbs +113 -53
- data/sig/generated/gruff/bezier.rbs +2 -1
- data/sig/generated/gruff/box.rbs +13 -5
- data/sig/generated/gruff/bubble.rbs +8 -4
- data/sig/generated/gruff/bullet.rbs +8 -4
- data/sig/generated/gruff/candlestick.rbs +26 -14
- data/sig/generated/gruff/dot.rbs +8 -4
- data/sig/generated/gruff/font.rbs +3 -1
- data/sig/generated/gruff/helper/bar_value_label.rbs +4 -2
- data/sig/generated/gruff/helper/stacked_mixin.rbs +2 -1
- data/sig/generated/gruff/histogram.rbs +6 -3
- data/sig/generated/gruff/line.rbs +44 -16
- data/sig/generated/gruff/mini/bar.rbs +27 -0
- data/sig/generated/gruff/mini/legend.rbs +36 -0
- data/sig/generated/gruff/mini/pie.rbs +26 -0
- data/sig/generated/gruff/mini/side_bar.rbs +34 -0
- data/sig/generated/gruff/net.rbs +12 -6
- data/sig/generated/gruff/patch/rmagick.rbs +25 -0
- data/sig/generated/gruff/patch/string.rbs +11 -0
- data/sig/generated/gruff/pie.rbs +15 -7
- data/sig/generated/gruff/renderer/bezier.rbs +2 -1
- data/sig/generated/gruff/renderer/circle.rbs +2 -1
- data/sig/generated/gruff/renderer/dash_line.rbs +2 -1
- data/sig/generated/gruff/renderer/dot.rbs +17 -4
- data/sig/generated/gruff/renderer/ellipse.rbs +2 -1
- data/sig/generated/gruff/renderer/line.rbs +9 -2
- data/sig/generated/gruff/renderer/polygon.rbs +17 -0
- data/sig/generated/gruff/renderer/polyline.rbs +2 -1
- data/sig/generated/gruff/renderer/rectangle.rbs +2 -1
- data/sig/generated/gruff/renderer/renderer.rbs +31 -8
- data/sig/generated/gruff/renderer/text.rbs +7 -3
- data/sig/generated/gruff/scatter.rbs +30 -13
- data/sig/generated/gruff/side_bar.rbs +15 -6
- data/sig/generated/gruff/side_stacked_bar.rbs +6 -3
- data/sig/generated/gruff/spider.rbs +35 -11
- data/sig/generated/gruff/stacked_area.rbs +9 -4
- data/sig/generated/gruff/stacked_bar.rbs +10 -5
- data/sig/generated/gruff/store/basic_data.rbs +8 -4
- data/sig/generated/gruff/store/store.rbs +12 -4
- data/sig/generated/gruff/store/xy_data.rbs +4 -2
- data/sig/generated/gruff/store/xy_pointsizes_data.rbs +4 -2
- data/sig/generated/gruff.rbs +3 -1
- metadata +12 -3
data/lib/gruff/pie.rb
CHANGED
|
@@ -41,6 +41,8 @@ class Gruff::Pie < Gruff::Base
|
|
|
41
41
|
# Can be used to make the pie start cutting slices at the top (-90.0)
|
|
42
42
|
# or at another angle. Default is +-90.0+, which starts at 3 o'clock.
|
|
43
43
|
# @deprecated Please use {#start_degree=} instead.
|
|
44
|
+
# @rbs value: Float | Integer
|
|
45
|
+
# @rbs return: void
|
|
44
46
|
def zero_degree=(value)
|
|
45
47
|
warn '#zero_degree= is deprecated. Please use `start_degree` attribute instead'
|
|
46
48
|
@start_degree = value
|
|
@@ -48,6 +50,7 @@ class Gruff::Pie < Gruff::Base
|
|
|
48
50
|
|
|
49
51
|
private
|
|
50
52
|
|
|
53
|
+
# @rbs return: void
|
|
51
54
|
def initialize_attributes
|
|
52
55
|
super
|
|
53
56
|
@start_degree = -90.0
|
|
@@ -63,11 +66,13 @@ private
|
|
|
63
66
|
@label_formatting = ->(value, percentage) { @show_values_as_labels ? value.to_s : "#{percentage}%" }
|
|
64
67
|
end
|
|
65
68
|
|
|
69
|
+
# @rbs return: void
|
|
66
70
|
def setup_drawing
|
|
67
71
|
@center_labels_over_point = false
|
|
68
72
|
super
|
|
69
73
|
end
|
|
70
74
|
|
|
75
|
+
# @rbs return: void
|
|
71
76
|
def draw_graph
|
|
72
77
|
slices.each do |slice|
|
|
73
78
|
if slice.value > 0
|
|
@@ -79,6 +84,7 @@ private
|
|
|
79
84
|
end
|
|
80
85
|
end
|
|
81
86
|
|
|
87
|
+
# @rbs return: Array[Gruff::Pie::PieSlice]
|
|
82
88
|
def slices
|
|
83
89
|
@slices ||= begin
|
|
84
90
|
slices = store.data.map { |data| Gruff::Pie::PieSlice.new(data.label, data.points.first, data.color) }
|
|
@@ -93,6 +99,7 @@ private
|
|
|
93
99
|
# General Helper Methods
|
|
94
100
|
|
|
95
101
|
# @rbs degrees: Float | Integer
|
|
102
|
+
# @rbs return: void
|
|
96
103
|
def update_chart_degrees_with(degrees)
|
|
97
104
|
@chart_degrees = chart_degrees + degrees
|
|
98
105
|
end
|
|
@@ -150,6 +157,7 @@ private
|
|
|
150
157
|
# Label-Related Methods
|
|
151
158
|
|
|
152
159
|
# @rbs slice: Gruff::Pie::PieSlice
|
|
160
|
+
# @rbs return: void
|
|
153
161
|
def process_label_for(slice)
|
|
154
162
|
if slice.percentage >= @hide_labels_less_than
|
|
155
163
|
x, y = label_coordinates_for slice
|
data/lib/gruff/renderer/dot.rb
CHANGED
|
@@ -22,6 +22,7 @@ module Gruff
|
|
|
22
22
|
# @rbs new_x: Float | Integer
|
|
23
23
|
# @rbs new_y: Float | Integer
|
|
24
24
|
# @rbs radius: Float | Integer
|
|
25
|
+
# @rbs return: void
|
|
25
26
|
def render(new_x, new_y, radius)
|
|
26
27
|
@renderer.draw.push
|
|
27
28
|
@renderer.draw.stroke_width(@width)
|
|
@@ -41,10 +42,18 @@ module Gruff
|
|
|
41
42
|
|
|
42
43
|
private
|
|
43
44
|
|
|
45
|
+
# @rbs new_x: Float | Integer
|
|
46
|
+
# @rbs new_y: Float | Integer
|
|
47
|
+
# @rbs radius: Float | Integer
|
|
48
|
+
# @rbs return: void
|
|
44
49
|
def circle(new_x, new_y, radius)
|
|
45
50
|
@renderer.draw.circle(new_x, new_y, new_x - radius, new_y)
|
|
46
51
|
end
|
|
47
52
|
|
|
53
|
+
# @rbs new_x: Float | Integer
|
|
54
|
+
# @rbs new_y: Float | Integer
|
|
55
|
+
# @rbs radius: Float | Integer
|
|
56
|
+
# @rbs return: void
|
|
48
57
|
def square(new_x, new_y, radius)
|
|
49
58
|
corner1 = new_x - radius
|
|
50
59
|
corner2 = new_y - radius
|
|
@@ -53,6 +62,10 @@ module Gruff
|
|
|
53
62
|
@renderer.draw.rectangle(corner1, corner2, corner3, corner4)
|
|
54
63
|
end
|
|
55
64
|
|
|
65
|
+
# @rbs new_x: Float | Integer
|
|
66
|
+
# @rbs new_y: Float | Integer
|
|
67
|
+
# @rbs radius: Float | Integer
|
|
68
|
+
# @rbs return: void
|
|
56
69
|
def diamond(new_x, new_y, radius)
|
|
57
70
|
polygon = []
|
|
58
71
|
polygon += [new_x - radius, new_y]
|
|
@@ -21,6 +21,7 @@ module Gruff
|
|
|
21
21
|
# @rbs height: Float | Integer
|
|
22
22
|
# @rbs arc_start: Float | Integer
|
|
23
23
|
# @rbs arc_end: Float | Integer
|
|
24
|
+
# @rbs return: void
|
|
24
25
|
def render(origin_x, origin_y, width, height, arc_start, arc_end)
|
|
25
26
|
@renderer.draw.push
|
|
26
27
|
@renderer.draw.stroke_width(@width)
|
data/lib/gruff/renderer/line.rb
CHANGED
|
@@ -21,12 +21,19 @@ module Gruff
|
|
|
21
21
|
# @rbs start_y: Float | Integer
|
|
22
22
|
# @rbs end_x: Float | Integer
|
|
23
23
|
# @rbs end_y: Float | Integer
|
|
24
|
+
# @rbs return: void
|
|
24
25
|
def render(start_x, start_y, end_x, end_y)
|
|
25
26
|
render_line(start_x, start_y, end_x, end_y, @color)
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
private
|
|
29
30
|
|
|
31
|
+
# @rbs start_x: Float | Integer
|
|
32
|
+
# @rbs start_y: Float | Integer
|
|
33
|
+
# @rbs end_x: Float | Integer
|
|
34
|
+
# @rbs end_y: Float | Integer
|
|
35
|
+
# @rbs color: String
|
|
36
|
+
# @rbs return: void
|
|
30
37
|
def render_line(start_x, start_y, end_x, end_y, color)
|
|
31
38
|
# FIXME(uwe): Workaround for Issue #66
|
|
32
39
|
# https://github.com/topfunky/gruff/issues/66
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rbs_inline: enabled
|
|
2
3
|
|
|
3
4
|
module Gruff
|
|
4
5
|
# @private
|
|
@@ -16,6 +17,7 @@ module Gruff
|
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
# @rbs points: Array[Float | Integer]
|
|
20
|
+
# @rbs return: void
|
|
19
21
|
def render(points)
|
|
20
22
|
@renderer.draw.push
|
|
21
23
|
@renderer.draw.stroke_width(@width)
|
|
@@ -21,6 +21,7 @@ module Gruff
|
|
|
21
21
|
# @rbs upper_left_y: Float | Integer
|
|
22
22
|
# @rbs lower_right_x: Float | Integer
|
|
23
23
|
# @rbs lower_right_y: Float | Integer
|
|
24
|
+
# @rbs return: void
|
|
24
25
|
def render(upper_left_x, upper_left_y, lower_right_x, lower_right_y)
|
|
25
26
|
@renderer.draw.push
|
|
26
27
|
@renderer.draw.stroke_width(@width)
|
|
@@ -6,9 +6,9 @@ module Gruff
|
|
|
6
6
|
# @private
|
|
7
7
|
class Renderer
|
|
8
8
|
attr_accessor :text_renderers #: Array[Gruff::Renderer::Text]
|
|
9
|
-
attr_reader :draw
|
|
10
|
-
attr_reader :image
|
|
11
|
-
attr_reader :scale #:
|
|
9
|
+
attr_reader :draw #: untyped
|
|
10
|
+
attr_reader :image #: untyped
|
|
11
|
+
attr_reader :scale #: Float | Integer
|
|
12
12
|
|
|
13
13
|
# @rbs columns: Integer
|
|
14
14
|
# @rbs rows: Integer
|
|
@@ -24,6 +24,7 @@ module Gruff
|
|
|
24
24
|
@image = background(columns, rows, scale, theme_options)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
# @rbs return: void
|
|
27
28
|
def finish
|
|
28
29
|
@draw.draw(@image)
|
|
29
30
|
|
|
@@ -34,12 +35,18 @@ module Gruff
|
|
|
34
35
|
|
|
35
36
|
# @rbs columns: Integer
|
|
36
37
|
# @rbs rows: Integer
|
|
38
|
+
# @rbs return: void
|
|
37
39
|
def transparent_background(columns, rows)
|
|
38
40
|
@image = render_transparent_background(columns, rows)
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
private
|
|
42
44
|
|
|
45
|
+
# @rbs columns: Integer
|
|
46
|
+
# @rbs rows: Integer
|
|
47
|
+
# @rbs scale: Float | Integer
|
|
48
|
+
# @rbs theme_options: ::Hash[Symbol, untyped]
|
|
49
|
+
# @rbs return: void
|
|
43
50
|
def background(columns, rows, scale, theme_options)
|
|
44
51
|
return image_background(scale, *theme_options[:background_image]) if theme_options[:background_image] # steep:ignore
|
|
45
52
|
|
|
@@ -54,6 +61,9 @@ module Gruff
|
|
|
54
61
|
end
|
|
55
62
|
|
|
56
63
|
# Use with a theme to use an image (800x600 original) background.
|
|
64
|
+
# @rbs scale: Float | Integer
|
|
65
|
+
# @rbs image_path: String
|
|
66
|
+
# @rbs return: untyped
|
|
57
67
|
def image_background(scale, image_path)
|
|
58
68
|
image = Magick::Image.read(image_path)
|
|
59
69
|
if scale != 1.0
|
|
@@ -63,6 +73,10 @@ module Gruff
|
|
|
63
73
|
end
|
|
64
74
|
|
|
65
75
|
# Make a new image at the current size with a solid +color+.
|
|
76
|
+
# @rbs columns: Integer
|
|
77
|
+
# @rbs rows: Integer
|
|
78
|
+
# @rbs color: String
|
|
79
|
+
# @rbs return: void
|
|
66
80
|
def solid_background(columns, rows, color)
|
|
67
81
|
Magick::Image.new(columns, rows) do |img|
|
|
68
82
|
img.background_color = color
|
|
@@ -70,6 +84,12 @@ module Gruff
|
|
|
70
84
|
end
|
|
71
85
|
|
|
72
86
|
# Use with a theme definition method to draw a gradated background.
|
|
87
|
+
# @rbs columns: Integer
|
|
88
|
+
# @rbs rows: Integer
|
|
89
|
+
# @rbs top_color: String
|
|
90
|
+
# @rbs bottom_color: String
|
|
91
|
+
# @rbs direct: Symbol
|
|
92
|
+
# @rbs return: void
|
|
73
93
|
def gradated_background(columns, rows, top_color, bottom_color, direct = :top_bottom)
|
|
74
94
|
gradient_fill = begin
|
|
75
95
|
case direct
|
|
@@ -105,6 +125,9 @@ module Gruff
|
|
|
105
125
|
end
|
|
106
126
|
|
|
107
127
|
# Use with a theme to make a transparent background
|
|
128
|
+
# @rbs columns: Integer
|
|
129
|
+
# @rbs rows: Integer
|
|
130
|
+
# @rbs return: void
|
|
108
131
|
def render_transparent_background(columns, rows)
|
|
109
132
|
Magick::Image.new(columns, rows) do |img|
|
|
110
133
|
img.background_color = 'transparent'
|
data/lib/gruff/renderer/text.rb
CHANGED
|
@@ -11,6 +11,7 @@ module Gruff
|
|
|
11
11
|
# @rbs text: String
|
|
12
12
|
# @rbs font: Gruff::Font
|
|
13
13
|
# @rbs rotation: Float | Integer
|
|
14
|
+
# @rbs return: void
|
|
14
15
|
def initialize(renderer, text, font:, rotation: nil)
|
|
15
16
|
@renderer = renderer
|
|
16
17
|
@text = text.to_s
|
|
@@ -19,13 +20,14 @@ module Gruff
|
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
attr_reader :width, :height, :x, :y #: Float | Integer
|
|
22
|
-
attr_reader :gravity
|
|
23
|
+
attr_reader :gravity #: untyped
|
|
23
24
|
|
|
24
25
|
# @rbs width: Float | Integer
|
|
25
26
|
# @rbs height: Float | Integer
|
|
26
27
|
# @rbs x: Float | Integer
|
|
27
28
|
# @rbs y: Float | Integer
|
|
28
29
|
# @rbs gravity: untyped
|
|
30
|
+
# @rbs return: void
|
|
29
31
|
def add_to_render_queue(width, height, x, y, gravity = Magick::NorthGravity)
|
|
30
32
|
@width = width
|
|
31
33
|
@height = height
|
|
@@ -41,6 +43,7 @@ module Gruff
|
|
|
41
43
|
# @rbs x: Float | Integer
|
|
42
44
|
# @rbs y: Float | Integer
|
|
43
45
|
# @rbs gravity: untyped
|
|
46
|
+
# @rbs return: void
|
|
44
47
|
def render(width, height, x, y, gravity = Magick::NorthGravity)
|
|
45
48
|
@renderer.draw.push
|
|
46
49
|
@renderer.draw.rotation = @rotation if @rotation
|
|
@@ -58,6 +61,7 @@ module Gruff
|
|
|
58
61
|
@renderer.draw.pop
|
|
59
62
|
end
|
|
60
63
|
|
|
64
|
+
# @rbs return: untyped
|
|
61
65
|
def metrics
|
|
62
66
|
@renderer.draw.push
|
|
63
67
|
@renderer.draw.font = @font.file_path
|
data/lib/gruff/scatter.rb
CHANGED
|
@@ -31,6 +31,8 @@ class Gruff::Scatter < Gruff::Base
|
|
|
31
31
|
|
|
32
32
|
# Allow enabling vertical lines. When you have a lot of data, they can work great.
|
|
33
33
|
# @deprecated Please use {#show_vertical_markers=} instead.
|
|
34
|
+
# @rbs value: bool
|
|
35
|
+
# @rbs return: void
|
|
34
36
|
def enable_vertical_line_markers=(value)
|
|
35
37
|
warn '#enable_vertical_line_markers= is deprecated. Please use `show_vertical_markers` attribute instead'
|
|
36
38
|
@show_vertical_markers = value
|
|
@@ -38,12 +40,16 @@ class Gruff::Scatter < Gruff::Base
|
|
|
38
40
|
|
|
39
41
|
# Allow using vertical labels in the X axis.
|
|
40
42
|
# @deprecated Please use {Gruff::Base#label_rotation=} instead.
|
|
43
|
+
# @rbs _value: untyped
|
|
44
|
+
# @rbs return: void
|
|
41
45
|
def use_vertical_x_labels=(_value)
|
|
42
46
|
warn '#use_vertical_x_labels= is deprecated. It is no longer effective. Please use `#label_rotation=` instead'
|
|
43
47
|
end
|
|
44
48
|
|
|
45
49
|
# Allow using vertical labels in the X axis (and setting the label margin).
|
|
46
50
|
# @deprecated
|
|
51
|
+
# @rbs _value: untyped
|
|
52
|
+
# @rbs return: void
|
|
47
53
|
def x_label_margin=(_value)
|
|
48
54
|
warn '#x_label_margin= is deprecated. It is no longer effective.'
|
|
49
55
|
end
|
|
@@ -51,6 +57,8 @@ class Gruff::Scatter < Gruff::Base
|
|
|
51
57
|
# Allow disabling the significant rounding when labeling the X axis.
|
|
52
58
|
# This is useful when working with a small range of high values (for example, a date range of months, while seconds as units).
|
|
53
59
|
# @deprecated
|
|
60
|
+
# @rbs _value: untyped
|
|
61
|
+
# @rbs return: void
|
|
54
62
|
def disable_significant_rounding_x_axis=(_value)
|
|
55
63
|
warn '#disable_significant_rounding_x_axis= is deprecated. It is no longer effective.'
|
|
56
64
|
end
|
|
@@ -93,6 +101,7 @@ class Gruff::Scatter < Gruff::Base
|
|
|
93
101
|
# @rbs x_data_points: Array[nil | Float | Integer] | nil
|
|
94
102
|
# @rbs y_data_points: Array[nil | Float | Integer] | nil
|
|
95
103
|
# @rbs color: String
|
|
104
|
+
# @rbs return: void
|
|
96
105
|
def data(name, x_data_points = [], y_data_points = [], color = nil)
|
|
97
106
|
# make sure it's an array
|
|
98
107
|
x_data_points = Array(x_data_points)
|
|
@@ -111,10 +120,12 @@ class Gruff::Scatter < Gruff::Base
|
|
|
111
120
|
|
|
112
121
|
private
|
|
113
122
|
|
|
123
|
+
# @rbs return: void
|
|
114
124
|
def initialize_store
|
|
115
125
|
@store = Gruff::Store.new(Gruff::Store::XYData)
|
|
116
126
|
end
|
|
117
127
|
|
|
128
|
+
# @rbs return: void
|
|
118
129
|
def initialize_attributes
|
|
119
130
|
super
|
|
120
131
|
|
|
@@ -125,11 +136,13 @@ private
|
|
|
125
136
|
@stroke_width = nil
|
|
126
137
|
end
|
|
127
138
|
|
|
139
|
+
# @rbs return: void
|
|
128
140
|
def setup_drawing
|
|
129
141
|
@center_labels_over_point = false
|
|
130
142
|
super
|
|
131
143
|
end
|
|
132
144
|
|
|
145
|
+
# @rbs return: void
|
|
133
146
|
def setup_data
|
|
134
147
|
# TODO: Need to get x-axis labels working. Current behavior will be to not allow.
|
|
135
148
|
@labels = {}
|
|
@@ -147,6 +160,7 @@ private
|
|
|
147
160
|
super
|
|
148
161
|
end
|
|
149
162
|
|
|
163
|
+
# @rbs return: void
|
|
150
164
|
def draw_graph
|
|
151
165
|
stroke_width = @stroke_width || clip_value_if_greater_than(@columns / (store.norm_data.first.x_points.size * 4.0), 5.0)
|
|
152
166
|
circle_radius = @circle_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.x_points.size * 2.5), 5.0)
|
|
@@ -163,18 +177,21 @@ private
|
|
|
163
177
|
end
|
|
164
178
|
end
|
|
165
179
|
|
|
180
|
+
# @rbs return: void
|
|
166
181
|
def calculate_spread
|
|
167
182
|
super
|
|
168
183
|
@x_spread = @maximum_x_value.to_f - @minimum_x_value.to_f
|
|
169
184
|
@x_spread = @x_spread > 0 ? @x_spread : 1.0
|
|
170
185
|
end
|
|
171
186
|
|
|
187
|
+
# @rbs return: void
|
|
172
188
|
def normalize
|
|
173
189
|
return unless data_given?
|
|
174
190
|
|
|
175
191
|
store.normalize(minimum_x: @minimum_x_value, spread_x: @x_spread, minimum_y: minimum_value, spread_y: @spread)
|
|
176
192
|
end
|
|
177
193
|
|
|
194
|
+
# @rbs return: void
|
|
178
195
|
def draw_line_markers
|
|
179
196
|
# do all of the stuff for the horizontal lines on the y-axis
|
|
180
197
|
super
|
data/lib/gruff/side_bar.rb
CHANGED
|
@@ -55,12 +55,15 @@ class Gruff::SideBar < Gruff::Base
|
|
|
55
55
|
|
|
56
56
|
# With Side Bars use the data label for the marker value to the left of the bar.
|
|
57
57
|
# @deprecated
|
|
58
|
+
# @rbs _value: untyped
|
|
59
|
+
# @rbs return: void
|
|
58
60
|
def use_data_label=(_value)
|
|
59
61
|
warn '#use_data_label is deprecated. It is no longer effective.'
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
private
|
|
63
65
|
|
|
66
|
+
# @rbs return: void
|
|
64
67
|
def initialize_attributes
|
|
65
68
|
super
|
|
66
69
|
@bar_spacing = 0.9
|
|
@@ -85,6 +88,7 @@ private
|
|
|
85
88
|
@hide_line_markers && @x_axis_label.nil? && @legend_at_bottom == false
|
|
86
89
|
end
|
|
87
90
|
|
|
91
|
+
# @rbs return: void
|
|
88
92
|
def setup_graph_measurements
|
|
89
93
|
super
|
|
90
94
|
return if @hide_line_markers
|
|
@@ -105,6 +109,7 @@ private
|
|
|
105
109
|
end
|
|
106
110
|
end
|
|
107
111
|
|
|
112
|
+
# @rbs return: void
|
|
108
113
|
def draw_graph
|
|
109
114
|
# Setup spacing.
|
|
110
115
|
#
|
|
@@ -148,6 +153,7 @@ private
|
|
|
148
153
|
end
|
|
149
154
|
|
|
150
155
|
# Instead of base class version, draws vertical background lines and label
|
|
156
|
+
# @rbs return: void
|
|
151
157
|
def draw_line_markers
|
|
152
158
|
return if @hide_line_markers
|
|
153
159
|
|
|
@@ -176,6 +182,9 @@ private
|
|
|
176
182
|
##
|
|
177
183
|
# Draw on the Y axis instead of the X
|
|
178
184
|
|
|
185
|
+
# @rbs y_offset: Float | Integer
|
|
186
|
+
# @rbs index: Integer
|
|
187
|
+
# @rbs return: void
|
|
179
188
|
def draw_label(y_offset, index)
|
|
180
189
|
draw_unique_label(index) do
|
|
181
190
|
draw_label_at(@graph_left - @label_margin, 1.0, 0.0, y_offset, @labels[index], gravity: Magick::EastGravity)
|
|
@@ -52,6 +52,7 @@ class Gruff::SideStackedBar < Gruff::SideBar
|
|
|
52
52
|
|
|
53
53
|
private
|
|
54
54
|
|
|
55
|
+
# @rbs return: void
|
|
55
56
|
def initialize_attributes
|
|
56
57
|
super
|
|
57
58
|
@bar_spacing = 0.9
|
|
@@ -62,11 +63,13 @@ private
|
|
|
62
63
|
@minimum_value = 0.0
|
|
63
64
|
end
|
|
64
65
|
|
|
66
|
+
# @rbs return: void
|
|
65
67
|
def setup_data
|
|
66
68
|
calculate_maximum_by_stack
|
|
67
69
|
super
|
|
68
70
|
end
|
|
69
71
|
|
|
72
|
+
# @rbs return: void
|
|
70
73
|
def draw_graph
|
|
71
74
|
# Setup spacing.
|
|
72
75
|
#
|
data/lib/gruff/spider.rb
CHANGED
|
@@ -30,12 +30,14 @@ class Gruff::Spider < Gruff::Base
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# @rbs value: bool
|
|
33
|
+
# @rbs return: void
|
|
33
34
|
def hide_text=(value)
|
|
34
35
|
@hide_title = @hide_text = value
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
private
|
|
38
39
|
|
|
40
|
+
# @rbs return: void
|
|
39
41
|
def initialize_attributes
|
|
40
42
|
super
|
|
41
43
|
@hide_legend = true
|
|
@@ -48,11 +50,13 @@ private
|
|
|
48
50
|
@hide_line_markers.freeze
|
|
49
51
|
end
|
|
50
52
|
|
|
53
|
+
# @rbs return: void
|
|
51
54
|
def setup_drawing
|
|
52
55
|
@center_labels_over_point = false
|
|
53
56
|
super
|
|
54
57
|
end
|
|
55
58
|
|
|
59
|
+
# @rbs return: void
|
|
56
60
|
def setup_graph_measurements
|
|
57
61
|
super
|
|
58
62
|
|
|
@@ -65,12 +69,14 @@ private
|
|
|
65
69
|
@graph_height = @graph_bottom - @graph_top
|
|
66
70
|
end
|
|
67
71
|
|
|
72
|
+
# @rbs return: void
|
|
68
73
|
def setup_data
|
|
69
74
|
raise(Gruff::IncorrectNumberOfDatasetsException, 'Requires 3 or more data sets') if store.length < 3
|
|
70
75
|
|
|
71
76
|
super
|
|
72
77
|
end
|
|
73
78
|
|
|
79
|
+
# @rbs return: void
|
|
74
80
|
def draw_graph
|
|
75
81
|
# Setup basic positioning
|
|
76
82
|
radius = @graph_height / 2.0
|
|
@@ -88,11 +94,18 @@ private
|
|
|
88
94
|
draw_polygon(center_x, center_y, additive_angle)
|
|
89
95
|
end
|
|
90
96
|
|
|
91
|
-
# @rbs value:
|
|
97
|
+
# @rbs value: Float | Integer
|
|
98
|
+
# @rbs return: Float
|
|
92
99
|
def normalize_points(value)
|
|
93
|
-
value.to_f * @unit_length
|
|
100
|
+
(value.to_f * @unit_length).to_f
|
|
94
101
|
end
|
|
95
102
|
|
|
103
|
+
# @rbs center_x: Float | Integer
|
|
104
|
+
# @rbs center_y: Float | Integer
|
|
105
|
+
# @rbs angle: Float | Integer
|
|
106
|
+
# @rbs radius: Float | Integer
|
|
107
|
+
# @rbs amount: Float | Integer
|
|
108
|
+
# @rbs return: void
|
|
96
109
|
def draw_label(center_x, center_y, angle, radius, amount)
|
|
97
110
|
degree = rad2deg(angle)
|
|
98
111
|
metrics = text_metrics(@marker_font, amount)
|
|
@@ -118,6 +131,12 @@ private
|
|
|
118
131
|
draw_label_at(metrics.width, metrics.height, x, y, amount, gravity: Magick::CenterGravity)
|
|
119
132
|
end
|
|
120
133
|
|
|
134
|
+
# @rbs center_x: Float | Integer
|
|
135
|
+
# @rbs center_y: Float | Integer
|
|
136
|
+
# @rbs radius: Float | Integer
|
|
137
|
+
# @rbs additive_angle: Float | Integer
|
|
138
|
+
# @rbs line_color: String | nil
|
|
139
|
+
# @rbs return: void
|
|
121
140
|
def draw_axes(center_x, center_y, radius, additive_angle, line_color = nil)
|
|
122
141
|
return if @hide_axes
|
|
123
142
|
|
|
@@ -136,6 +155,11 @@ private
|
|
|
136
155
|
end
|
|
137
156
|
end
|
|
138
157
|
|
|
158
|
+
# @rbs center_x: Float | Integer
|
|
159
|
+
# @rbs center_y: Float | Integer
|
|
160
|
+
# @rbs additive_angle: Float | Integer
|
|
161
|
+
# @rbs color: String | nil
|
|
162
|
+
# @rbs return: void
|
|
139
163
|
def draw_polygon(center_x, center_y, additive_angle, color = nil)
|
|
140
164
|
points = []
|
|
141
165
|
current_angle = deg2rad(@rotation)
|
data/lib/gruff/stacked_area.rb
CHANGED
|
@@ -18,22 +18,27 @@ class Gruff::StackedArea < Gruff::Base
|
|
|
18
18
|
include Gruff::Base::StackedMixin
|
|
19
19
|
|
|
20
20
|
# @deprecated
|
|
21
|
+
# @rbs _value: untyped
|
|
22
|
+
# @rbs return: void
|
|
21
23
|
def last_series_goes_on_bottom=(_value)
|
|
22
24
|
warn '#last_series_goes_on_bottom is deprecated. It is no longer effective.'
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
private
|
|
26
28
|
|
|
29
|
+
# @rbs return: void
|
|
27
30
|
def initialize_attributes
|
|
28
31
|
super
|
|
29
32
|
@minimum_value = 0.0
|
|
30
33
|
end
|
|
31
34
|
|
|
35
|
+
# @rbs return: void
|
|
32
36
|
def setup_data
|
|
33
37
|
calculate_maximum_by_stack
|
|
34
38
|
super
|
|
35
39
|
end
|
|
36
40
|
|
|
41
|
+
# @rbs return: void
|
|
37
42
|
def draw_graph
|
|
38
43
|
x_increment = (@graph_width / (column_count - 1)).to_f
|
|
39
44
|
|
data/lib/gruff/stacked_bar.rb
CHANGED
|
@@ -36,6 +36,7 @@ class Gruff::StackedBar < Gruff::Base
|
|
|
36
36
|
|
|
37
37
|
private
|
|
38
38
|
|
|
39
|
+
# @rbs return: void
|
|
39
40
|
def initialize_attributes
|
|
40
41
|
super
|
|
41
42
|
@bar_spacing = 0.9
|
|
@@ -46,6 +47,7 @@ private
|
|
|
46
47
|
@minimum_value = 0.0
|
|
47
48
|
end
|
|
48
49
|
|
|
50
|
+
# @rbs return: void
|
|
49
51
|
def setup_drawing
|
|
50
52
|
# Labels will be centered over the left of the bar if
|
|
51
53
|
# there are more labels than columns. This is basically the same
|
|
@@ -55,11 +57,13 @@ private
|
|
|
55
57
|
super
|
|
56
58
|
end
|
|
57
59
|
|
|
60
|
+
# @rbs return: void
|
|
58
61
|
def setup_data
|
|
59
62
|
calculate_maximum_by_stack
|
|
60
63
|
super
|
|
61
64
|
end
|
|
62
65
|
|
|
66
|
+
# @rbs return: void
|
|
63
67
|
def setup_graph_measurements
|
|
64
68
|
super
|
|
65
69
|
return if @hide_line_markers
|
|
@@ -75,6 +79,7 @@ private
|
|
|
75
79
|
end
|
|
76
80
|
|
|
77
81
|
# Draws a bar graph, but multiple sets are stacked on top of each other.
|
|
82
|
+
# @rbs return: void
|
|
78
83
|
def draw_graph
|
|
79
84
|
# Setup spacing.
|
|
80
85
|
#
|
|
@@ -13,6 +13,7 @@ module Gruff
|
|
|
13
13
|
# @rbs label: String | Symbol
|
|
14
14
|
# @rbs points: Array[nil | Float | Integer] | nil
|
|
15
15
|
# @rbs color: String
|
|
16
|
+
# @rbs return: void
|
|
16
17
|
def initialize(label, points, color)
|
|
17
18
|
@label = label.to_s
|
|
18
19
|
@points = Array(points)
|
|
@@ -21,14 +22,17 @@ module Gruff
|
|
|
21
22
|
|
|
22
23
|
alias x_points points
|
|
23
24
|
|
|
25
|
+
# @rbs return: void
|
|
24
26
|
def y_points
|
|
25
27
|
raise NotImplementedError, 'x_points is not implemented for BasicData'
|
|
26
28
|
end
|
|
27
29
|
|
|
30
|
+
# @rbs return: void
|
|
28
31
|
def coordinates
|
|
29
32
|
raise NotImplementedError, 'This method is not implemented for BasicData'
|
|
30
33
|
end
|
|
31
34
|
|
|
35
|
+
# @rbs return: void
|
|
32
36
|
def coordinate_and_pointsizes
|
|
33
37
|
raise NotImplementedError, 'This method is not implemented for BasicData'
|
|
34
38
|
end
|
data/lib/gruff/store/store.rb
CHANGED
|
@@ -7,12 +7,15 @@ module Gruff
|
|
|
7
7
|
class Store
|
|
8
8
|
attr_reader :data #: Array[Gruff::Store::BasicData | Gruff::Store::XYData | Gruff::Store::XYPointsizeData]
|
|
9
9
|
|
|
10
|
+
# @rbs data_class: untyped
|
|
10
11
|
# @rbs return: void
|
|
11
12
|
def initialize(data_class)
|
|
12
13
|
@data_class = data_class
|
|
13
14
|
@data = []
|
|
14
15
|
end
|
|
15
16
|
|
|
17
|
+
# @rbs *args: untyped
|
|
18
|
+
# @rbs return: void
|
|
16
19
|
def add(*args)
|
|
17
20
|
@data << @data_class.new(*args)
|
|
18
21
|
end
|
|
@@ -22,6 +25,8 @@ module Gruff
|
|
|
22
25
|
@norm_data || []
|
|
23
26
|
end
|
|
24
27
|
|
|
28
|
+
# @rbs **keywords: untyped
|
|
29
|
+
# @rbs return: untyped
|
|
25
30
|
def normalize(**keywords)
|
|
26
31
|
@norm_data = @data.map { |data_row| data_row.normalize(**keywords) } # steep:ignore
|
|
27
32
|
end
|
|
@@ -63,10 +68,12 @@ module Gruff
|
|
|
63
68
|
@max_x ||= @data.filter_map(&:max_x).max
|
|
64
69
|
end
|
|
65
70
|
|
|
71
|
+
# @rbs return: void
|
|
66
72
|
def sort_data!
|
|
67
73
|
@data = @data.sort_by { |a| -a.points.sum(&:to_f) }
|
|
68
74
|
end
|
|
69
75
|
|
|
76
|
+
# @rbs return: void
|
|
70
77
|
def sort_norm_data!
|
|
71
78
|
@norm_data = @norm_data.sort_by { |a| -a.points.sum(&:to_f) }
|
|
72
79
|
end
|
|
@@ -77,6 +84,7 @@ module Gruff
|
|
|
77
84
|
end
|
|
78
85
|
|
|
79
86
|
# @rbs colors: Array[String]
|
|
87
|
+
# @rbs return: void
|
|
80
88
|
def change_colors(colors)
|
|
81
89
|
index = 0
|
|
82
90
|
@data.each do |data_row|
|