gruff 0.7.0-java → 0.8.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/.editorconfig +14 -0
- data/.rubocop.yml +16 -0
- data/.rubocop_todo.yml +923 -0
- data/.travis.yml +21 -14
- data/{History.txt → CHANGELOG.md} +32 -25
- data/README.md +3 -2
- data/Rakefile +27 -18
- 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/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/gruff.gemspec +12 -10
- data/lib/gruff.rb +2 -2
- data/lib/gruff/accumulator_bar.rb +2 -2
- data/lib/gruff/area.rb +1 -4
- data/lib/gruff/bar.rb +12 -13
- data/lib/gruff/bar_conversion.rb +11 -11
- data/lib/gruff/base.rb +36 -36
- data/lib/gruff/bezier.rb +1 -2
- data/lib/gruff/bullet.rb +7 -10
- data/lib/gruff/deprecated.rb +10 -11
- data/lib/gruff/dot.rb +3 -4
- data/lib/gruff/line.rb +13 -14
- data/lib/gruff/mini/bar.rb +3 -3
- data/lib/gruff/mini/legend.rb +7 -8
- data/lib/gruff/mini/pie.rb +6 -6
- data/lib/gruff/mini/side_bar.rb +7 -7
- data/lib/gruff/net.rb +2 -8
- data/lib/gruff/photo_bar.rb +9 -12
- data/lib/gruff/pie.rb +6 -6
- data/lib/gruff/scatter.rb +47 -51
- data/lib/gruff/scene.rb +17 -19
- data/lib/gruff/side_bar.rb +5 -8
- data/lib/gruff/side_stacked_bar.rb +24 -26
- data/lib/gruff/spider.rb +14 -15
- data/lib/gruff/stacked_area.rb +12 -16
- data/lib/gruff/stacked_bar.rb +50 -52
- data/lib/gruff/stacked_mixin.rb +2 -3
- data/lib/gruff/themes.rb +32 -33
- data/lib/gruff/version.rb +1 -1
- metadata +15 -72
- data/RELEASE.md +0 -30
- 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/pie.rb
CHANGED
@@ -50,10 +50,10 @@ class Gruff::Pie < Gruff::Base
|
|
50
50
|
|
51
51
|
def options
|
52
52
|
{
|
53
|
-
:
|
54
|
-
:
|
55
|
-
:
|
56
|
-
:
|
53
|
+
zero_degree: zero_degree,
|
54
|
+
hide_labels_less_than: hide_labels_less_than,
|
55
|
+
text_offset_percentage: text_offset_percentage,
|
56
|
+
show_values_as_labels: show_values_as_labels
|
57
57
|
}
|
58
58
|
end
|
59
59
|
|
@@ -78,7 +78,7 @@ class Gruff::Pie < Gruff::Base
|
|
78
78
|
trigger_final_draw
|
79
79
|
end
|
80
80
|
|
81
|
-
|
81
|
+
private
|
82
82
|
|
83
83
|
def slices
|
84
84
|
@slices ||= begin
|
@@ -163,7 +163,7 @@ class Gruff::Pie < Gruff::Base
|
|
163
163
|
|
164
164
|
def process_label_for(slice)
|
165
165
|
if slice.percentage >= hide_labels_less_than
|
166
|
-
x, y
|
166
|
+
x, y = label_coordinates_for slice
|
167
167
|
|
168
168
|
@d = draw_label(x, y, slice.label)
|
169
169
|
end
|
data/lib/gruff/scatter.rb
CHANGED
@@ -6,30 +6,30 @@ require File.dirname(__FILE__) + '/base'
|
|
6
6
|
# g.data(:apples, [1,2,3,4], [4,3,2,1])
|
7
7
|
# g.data('oranges', [5,7,8], [4,1,7])
|
8
8
|
# g.write('test/output/scatter.png')
|
9
|
-
#
|
9
|
+
#
|
10
10
|
#
|
11
11
|
class Gruff::Scatter < Gruff::Base
|
12
12
|
|
13
13
|
# Maximum X Value. The value will get overwritten by the max in the
|
14
|
-
# datasets.
|
14
|
+
# datasets.
|
15
15
|
attr_accessor :maximum_x_value
|
16
|
-
|
17
|
-
# Minimum X Value. The value will get overwritten by the min in the
|
18
|
-
# datasets.
|
16
|
+
|
17
|
+
# Minimum X Value. The value will get overwritten by the min in the
|
18
|
+
# datasets.
|
19
19
|
attr_accessor :minimum_x_value
|
20
|
-
|
20
|
+
|
21
21
|
# The number of vertical lines shown for reference
|
22
22
|
attr_accessor :marker_x_count
|
23
|
-
|
23
|
+
|
24
24
|
#~ # Draw a dashed horizontal line at the given y value
|
25
25
|
#~ attr_accessor :baseline_y_value
|
26
|
-
|
26
|
+
|
27
27
|
#~ # Color of the horizontal baseline
|
28
28
|
#~ attr_accessor :baseline_y_color
|
29
|
-
|
29
|
+
|
30
30
|
#~ # Draw a dashed horizontal line at the given y value
|
31
31
|
#~ attr_accessor :baseline_x_value
|
32
|
-
|
32
|
+
|
33
33
|
#~ # Color of the horizontal baseline
|
34
34
|
#~ attr_accessor :baseline_x_color
|
35
35
|
|
@@ -51,8 +51,7 @@ class Gruff::Scatter < Gruff::Base
|
|
51
51
|
# Allow passing lambdas to format labels
|
52
52
|
attr_accessor :y_axis_label_format
|
53
53
|
attr_accessor :x_axis_label_format
|
54
|
-
|
55
|
-
|
54
|
+
|
56
55
|
# Gruff::Scatter takes the same parameters as the Gruff::Line graph
|
57
56
|
#
|
58
57
|
# ==== Example
|
@@ -91,7 +90,7 @@ class Gruff::Scatter < Gruff::Base
|
|
91
90
|
super
|
92
91
|
return unless @has_data
|
93
92
|
|
94
|
-
# Check to see if more than one datapoint was given. NaN can result otherwise.
|
93
|
+
# Check to see if more than one datapoint was given. NaN can result otherwise.
|
95
94
|
@x_increment = (@column_count > 1) ? (@graph_width / (@column_count - 1).to_f) : @graph_width
|
96
95
|
|
97
96
|
#~ if (defined?(@norm_y_baseline)) then
|
@@ -106,13 +105,13 @@ class Gruff::Scatter < Gruff::Base
|
|
106
105
|
#~ end
|
107
106
|
|
108
107
|
#~ if (defined?(@norm_x_baseline)) then
|
109
|
-
|
108
|
+
|
110
109
|
#~ end
|
111
110
|
|
112
|
-
@norm_data.each do |data_row|
|
111
|
+
@norm_data.each do |data_row|
|
113
112
|
data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index|
|
114
113
|
x_value = data_row[DATA_VALUES_X_INDEX][index]
|
115
|
-
next if data_point.nil? || x_value.nil?
|
114
|
+
next if data_point.nil? || x_value.nil?
|
116
115
|
|
117
116
|
new_x = get_x_coord(x_value, @graph_width, @graph_left)
|
118
117
|
new_y = @graph_top + (@graph_height - data_point * @graph_height)
|
@@ -130,7 +129,7 @@ class Gruff::Scatter < Gruff::Base
|
|
130
129
|
|
131
130
|
@d.draw(@base_image)
|
132
131
|
end
|
133
|
-
|
132
|
+
|
134
133
|
# The first parameter is the name of the dataset. The next two are the
|
135
134
|
# x and y axis data points contain in their own array in that respective
|
136
135
|
# order. The final parameter is the color.
|
@@ -146,8 +145,8 @@ class Gruff::Scatter < Gruff::Base
|
|
146
145
|
#
|
147
146
|
# ==== Parameters
|
148
147
|
# name:: String or Symbol containing the name of the dataset.
|
149
|
-
# x_data_points:: An Array of of x-axis data points.
|
150
|
-
# y_data_points:: An Array of of y-axis data points.
|
148
|
+
# x_data_points:: An Array of of x-axis data points.
|
149
|
+
# y_data_points:: An Array of of y-axis data points.
|
151
150
|
# color:: The hex string for the color of the dataset. Defaults to nil.
|
152
151
|
#
|
153
152
|
# ==== Exceptions
|
@@ -168,64 +167,63 @@ class Gruff::Scatter < Gruff::Base
|
|
168
167
|
# g.data('oranges', [1,1,1], [2,3,4])
|
169
168
|
# g.data('bitter_melon', [3,5,6], [6,7,8], '#000000')
|
170
169
|
#
|
171
|
-
def data(name, x_data_points=[], y_data_points=[], color=nil)
|
172
|
-
|
170
|
+
def data(name, x_data_points = [], y_data_points = [], color = nil)
|
173
171
|
raise ArgumentError, 'Data Points contain nil Value!' if x_data_points.include?(nil) || y_data_points.include?(nil)
|
174
172
|
raise ArgumentError, 'x_data_points is empty!' if x_data_points.empty?
|
175
173
|
raise ArgumentError, 'y_data_points is empty!' if y_data_points.empty?
|
176
174
|
raise ArgumentError, 'x_data_points.length != y_data_points.length!' if x_data_points.length != y_data_points.length
|
177
|
-
|
175
|
+
|
178
176
|
# Call the existing data routine for the y axis data
|
179
177
|
super(name, y_data_points, color)
|
180
|
-
|
178
|
+
|
181
179
|
#append the x data to the last entry that was just added in the @data member
|
182
|
-
last_elem = @data.length()-1
|
180
|
+
last_elem = @data.length() - 1
|
183
181
|
@data[last_elem] << x_data_points
|
184
|
-
|
182
|
+
|
185
183
|
if @maximum_x_value.nil? && @minimum_x_value.nil?
|
186
184
|
@maximum_x_value = @minimum_x_value = x_data_points.first
|
187
185
|
end
|
188
|
-
|
186
|
+
|
189
187
|
@maximum_x_value = x_data_points.max > @maximum_x_value ?
|
190
188
|
x_data_points.max : @maximum_x_value
|
191
189
|
@minimum_x_value = x_data_points.min < @minimum_x_value ?
|
192
190
|
x_data_points.min : @minimum_x_value
|
193
191
|
end
|
194
|
-
|
192
|
+
|
195
193
|
protected
|
196
|
-
|
194
|
+
|
197
195
|
def calculate_spread #:nodoc:
|
198
196
|
super
|
199
197
|
@x_spread = @maximum_x_value.to_f - @minimum_x_value.to_f
|
200
198
|
@x_spread = @x_spread > 0 ? @x_spread : 1
|
201
199
|
end
|
202
|
-
|
203
|
-
def normalize(force=nil)
|
204
|
-
if @norm_data.nil? || force
|
200
|
+
|
201
|
+
def normalize(force = nil)
|
202
|
+
if @norm_data.nil? || force
|
205
203
|
@norm_data = []
|
206
204
|
return unless @has_data
|
207
|
-
|
205
|
+
|
208
206
|
@data.each do |data_row|
|
209
207
|
norm_data_points = [data_row[DATA_LABEL_INDEX]]
|
210
|
-
norm_data_points << data_row[DATA_VALUES_INDEX].map do |r|
|
211
|
-
|
212
|
-
|
208
|
+
norm_data_points << data_row[DATA_VALUES_INDEX].map do |r|
|
209
|
+
(r.to_f - @minimum_value.to_f) / @spread
|
210
|
+
end
|
213
211
|
norm_data_points << data_row[DATA_COLOR_INDEX]
|
214
|
-
norm_data_points << data_row[DATA_VALUES_X_INDEX].map do |r|
|
215
|
-
|
216
|
-
|
212
|
+
norm_data_points << data_row[DATA_VALUES_X_INDEX].map do |r|
|
213
|
+
(r.to_f - @minimum_x_value.to_f) / @x_spread
|
214
|
+
end
|
217
215
|
@norm_data << norm_data_points
|
218
216
|
end
|
219
217
|
end
|
220
218
|
#~ @norm_y_baseline = (@baseline_y_value.to_f / @maximum_value.to_f) if @baseline_y_value
|
221
219
|
#~ @norm_x_baseline = (@baseline_x_value.to_f / @maximum_x_value.to_f) if @baseline_x_value
|
222
220
|
end
|
223
|
-
|
221
|
+
|
224
222
|
def draw_line_markers
|
225
223
|
# do all of the stuff for the horizontal lines on the y-axis
|
226
224
|
super
|
227
225
|
return if @hide_line_markers
|
228
|
-
|
226
|
+
|
229
227
|
@d = @d.stroke_antialias false
|
230
228
|
|
231
229
|
if @x_axis_increment.nil?
|
@@ -249,7 +247,7 @@ protected
|
|
249
247
|
@minimum_x_value = @minimum_x_value.floor
|
250
248
|
calculate_spread
|
251
249
|
normalize(true)
|
252
|
-
|
250
|
+
|
253
251
|
@marker_count = (@x_spread / @x_axis_increment).to_i
|
254
252
|
@x_increment = @x_axis_increment
|
255
253
|
end
|
@@ -257,7 +255,6 @@ protected
|
|
257
255
|
|
258
256
|
# Draw vertical line markers and annotate with numbers
|
259
257
|
(0..@marker_x_count).each do |index|
|
260
|
-
|
261
258
|
# TODO Fix the vertical lines, and enable them by default. Not pretty when they don't match up with top y-axis line
|
262
259
|
if @enable_vertical_line_markers
|
263
260
|
x = @graph_left + @graph_width - index.to_f * @increment_x_scaled
|
@@ -277,18 +274,17 @@ protected
|
|
277
274
|
@d.pointsize = scale_fontsize(@marker_font_size)
|
278
275
|
@d.gravity = NorthGravity
|
279
276
|
@d.rotation = -90.0 if @use_vertical_x_labels
|
280
|
-
@d = @d.annotate_scaled(@base_image,
|
281
|
-
|
282
|
-
|
283
|
-
|
277
|
+
@d = @d.annotate_scaled(@base_image,
|
278
|
+
1.0, 1.0,
|
279
|
+
x_offset, y_offset,
|
280
|
+
vertical_label(marker_label, @x_increment), @scale)
|
284
281
|
@d.rotation = 90.0 if @use_vertical_x_labels
|
285
282
|
end
|
286
283
|
end
|
287
|
-
|
284
|
+
|
288
285
|
@d = @d.stroke_antialias true
|
289
286
|
end
|
290
287
|
|
291
|
-
|
292
288
|
def label(value, increment)
|
293
289
|
if @y_axis_label_format
|
294
290
|
@y_axis_label_format.call(value)
|
@@ -304,11 +300,11 @@ protected
|
|
304
300
|
label(value, increment)
|
305
301
|
end
|
306
302
|
end
|
307
|
-
|
303
|
+
|
308
304
|
private
|
309
|
-
|
305
|
+
|
310
306
|
def get_x_coord(x_data_point, width, offset) #:nodoc:
|
311
307
|
x_data_point * width + offset
|
312
308
|
end
|
313
|
-
|
309
|
+
|
314
310
|
end # end Gruff::Scatter
|
data/lib/gruff/scene.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
1
|
require "observer"
|
3
2
|
require File.dirname(__FILE__) + '/base'
|
4
3
|
|
5
4
|
##
|
6
5
|
# A scene is a non-linear graph that assembles layers together to tell a story.
|
7
|
-
# Layers are folders with appropriately named files (see below). You can group
|
6
|
+
# Layers are folders with appropriately named files (see below). You can group
|
8
7
|
# layers and control them together or just set their values individually.
|
9
8
|
#
|
10
9
|
# Examples:
|
@@ -13,7 +12,7 @@ require File.dirname(__FILE__) + '/base'
|
|
13
12
|
# * A traffic map that shows red lines on streets that are crowded and green on free-flowing ones.
|
14
13
|
#
|
15
14
|
# Usage:
|
16
|
-
#
|
15
|
+
#
|
17
16
|
# g = Gruff::Scene.new("500x100", "path/to/city_scene_directory")
|
18
17
|
#
|
19
18
|
# # Define order of layers, back to front
|
@@ -40,7 +39,7 @@ require File.dirname(__FILE__) + '/base'
|
|
40
39
|
# * If there is a file named 'default.png', it will be used unless other input values are set for the corresponding layer.
|
41
40
|
|
42
41
|
class Gruff::Scene < Gruff::Base
|
43
|
-
|
42
|
+
|
44
43
|
# An array listing the foldernames that will be rendered, from back to front.
|
45
44
|
#
|
46
45
|
# g.layers = %w(sky clouds buildings street people)
|
@@ -50,13 +49,13 @@ class Gruff::Scene < Gruff::Base
|
|
50
49
|
def initialize(target_width, base_dir)
|
51
50
|
@base_dir = base_dir
|
52
51
|
@groups = {}
|
53
|
-
@layers = []
|
52
|
+
@layers = []
|
54
53
|
super target_width
|
55
54
|
end
|
56
55
|
|
57
56
|
def draw
|
58
57
|
# Join all the custom paths and filter out the empty ones
|
59
|
-
image_paths = @layers.map { |layer| layer.path }.
|
58
|
+
image_paths = @layers.map { |layer| layer.path }.reject { |path| path.empty? }
|
60
59
|
images = Magick::ImageList.new(*image_paths)
|
61
60
|
@base_image = images.flatten_images
|
62
61
|
end
|
@@ -102,9 +101,8 @@ private
|
|
102
101
|
end
|
103
102
|
end
|
104
103
|
end
|
105
|
-
|
106
|
-
end
|
107
104
|
|
105
|
+
end
|
108
106
|
|
109
107
|
class Gruff::Group
|
110
108
|
|
@@ -117,31 +115,30 @@ class Gruff::Group
|
|
117
115
|
layer.observe self
|
118
116
|
end
|
119
117
|
end
|
120
|
-
|
118
|
+
|
121
119
|
def send_updates(value)
|
122
120
|
changed
|
123
121
|
notify_observers value
|
124
122
|
end
|
125
|
-
|
126
|
-
end
|
127
123
|
|
124
|
+
end
|
128
125
|
|
129
126
|
class Gruff::Layer
|
130
|
-
|
127
|
+
|
131
128
|
attr_reader :name
|
132
|
-
|
129
|
+
|
133
130
|
def initialize(base_dir, folder_name)
|
134
131
|
@base_dir = base_dir.to_s
|
135
132
|
@name = folder_name.to_s
|
136
133
|
@filenames = Dir.open(File.join(base_dir, folder_name)).entries.select { |file| file =~ /^[^.]+\.png$/ }.sort
|
137
134
|
@selected_filename = select_default
|
138
135
|
end
|
139
|
-
|
136
|
+
|
140
137
|
# Register this layer so it receives updates from the group
|
141
138
|
def observe(obj)
|
142
139
|
obj.add_observer self
|
143
140
|
end
|
144
|
-
|
141
|
+
|
145
142
|
# Choose the appropriate filename for this layer, based on the input
|
146
143
|
def update(value)
|
147
144
|
@selected_filename = case value.to_s
|
@@ -165,6 +162,7 @@ class Gruff::Layer
|
|
165
162
|
unless @selected_filename.nil? || @selected_filename.empty?
|
166
163
|
return File.join(@base_dir, @name, @selected_filename)
|
167
164
|
end
|
165
|
+
|
168
166
|
''
|
169
167
|
end
|
170
168
|
|
@@ -179,7 +177,7 @@ private
|
|
179
177
|
def select_numeric(value)
|
180
178
|
file_exists_or_blank value.to_s.gsub('-', '_')
|
181
179
|
end
|
182
|
-
|
180
|
+
|
183
181
|
def select_time(value)
|
184
182
|
times = @filenames.map { |filename| filename.gsub('.png', '') }
|
185
183
|
times.each_with_index do |time, index|
|
@@ -189,12 +187,12 @@ private
|
|
189
187
|
end
|
190
188
|
return "#{times.last}.png"
|
191
189
|
end
|
192
|
-
|
190
|
+
|
193
191
|
# Match "partly cloudy" to "partly_cloudy.png"
|
194
192
|
def select_string(value)
|
195
193
|
file_exists_or_blank value.to_s.gsub(' ', '_')
|
196
194
|
end
|
197
|
-
|
195
|
+
|
198
196
|
def select_default
|
199
197
|
@filenames.include?("default.png") ? "default.png" : ''
|
200
198
|
end
|
@@ -205,5 +203,5 @@ private
|
|
205
203
|
def file_exists_or_blank(filename)
|
206
204
|
@filenames.include?("#{filename}.png") ? "#{filename}.png" : select_default
|
207
205
|
end
|
208
|
-
|
206
|
+
|
209
207
|
end
|
data/lib/gruff/side_bar.rb
CHANGED
@@ -13,10 +13,11 @@ class Gruff::SideBar < Gruff::Base
|
|
13
13
|
super
|
14
14
|
|
15
15
|
return unless @has_data
|
16
|
+
|
16
17
|
draw_bars
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
+
protected
|
20
21
|
|
21
22
|
def draw_bars
|
22
23
|
# Setup spacing.
|
@@ -39,7 +40,6 @@ class Gruff::SideBar < Gruff::Base
|
|
39
40
|
@d = @d.fill data_row[DATA_COLOR_INDEX]
|
40
41
|
|
41
42
|
data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index|
|
42
|
-
|
43
43
|
# Using the original calcs from the stacked bar chart
|
44
44
|
# to get the difference between
|
45
45
|
# part of the bart chart we wish to stack.
|
@@ -59,7 +59,7 @@ class Gruff::SideBar < Gruff::Base
|
|
59
59
|
# Calculate center based on bar_width and current row
|
60
60
|
|
61
61
|
if @use_data_label
|
62
|
-
label_center = @graph_top + (@bar_width * (row_index+point_index) + @bar_width / 2)
|
62
|
+
label_center = @graph_top + (@bar_width * (row_index + point_index) + @bar_width / 2)
|
63
63
|
draw_label(label_center, row_index, @norm_data[row_index][DATA_LABEL_INDEX])
|
64
64
|
else
|
65
65
|
label_center = @graph_top + (@bars_width * point_index + @bars_width / 2)
|
@@ -67,10 +67,9 @@ class Gruff::SideBar < Gruff::Base
|
|
67
67
|
end
|
68
68
|
if @show_labels_for_bar_values
|
69
69
|
val = (@label_formatting || '%.2f') % @norm_data[row_index][3][point_index]
|
70
|
-
draw_value_label(right_x+40, (@graph_top + (((row_index+point_index+1) * @bar_width) - (@bar_width / 2)))-12, val.commify, true)
|
70
|
+
draw_value_label(right_x + 40, (@graph_top + (((row_index + point_index + 1) * @bar_width) - (@bar_width / 2))) - 12, val.commify, true)
|
71
71
|
end
|
72
72
|
end
|
73
|
-
|
74
73
|
end
|
75
74
|
|
76
75
|
@d.draw(@base_image)
|
@@ -78,7 +77,6 @@ class Gruff::SideBar < Gruff::Base
|
|
78
77
|
|
79
78
|
# Instead of base class version, draws vertical background lines and label
|
80
79
|
def draw_line_markers
|
81
|
-
|
82
80
|
return if @hide_line_markers
|
83
81
|
|
84
82
|
@d = @d.stroke_antialias false
|
@@ -92,7 +90,6 @@ class Gruff::SideBar < Gruff::Base
|
|
92
90
|
# TODO Round maximum marker value to a round number like 100, 0.1, 0.5, etc.
|
93
91
|
increment = significant(@spread.to_f / number_of_lines)
|
94
92
|
(0..number_of_lines).each do |index|
|
95
|
-
|
96
93
|
line_diff = (@graph_right - @graph_left) / number_of_lines
|
97
94
|
x = @graph_right - (line_diff * index) - 1
|
98
95
|
@d = @d.line(x, @graph_bottom, x, @graph_top)
|
@@ -118,7 +115,7 @@ class Gruff::SideBar < Gruff::Base
|
|
118
115
|
##
|
119
116
|
# Draw on the Y axis instead of the X
|
120
117
|
|
121
|
-
def draw_label(y_offset, index, label=nil)
|
118
|
+
def draw_label(y_offset, index, label = nil)
|
122
119
|
if !@labels[index].nil? && @labels_seen[index].nil?
|
123
120
|
lbl = (@use_data_label) ? label : @labels[index]
|
124
121
|
@d.fill = @font_color
|