svg-graph 2.2.1 → 2.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +7 -0
- data/lib/SVG/Graph/Graph.rb +6 -2
- data/lib/SVG/Graph/Line.rb +4 -3
- data/lib/SVG/Graph/Pie.rb +1 -1
- data/lib/SVG/Graph/Plot.rb +33 -6
- data/lib/SVG/Graph/Schedule.rb +1 -1
- data/lib/SVG/Graph/TimeSeries.rb +3 -3
- data/lib/svggraph.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d2a4756bdc712df308bb715f9076bac952fbf64dd8d8b2900d9c424b30026b7
|
4
|
+
data.tar.gz: 5c3b12638b3eb65936f32a84e50f222113b2c7c4c0e6f69bbbd9c594c99bd6eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd35db671d05e9f8c2559508a4ab7bf7bfd7d4582f6433fe4b93c2cd4f182c0692100f806cf3d72704ff4ec74a267ec2b319100df7704972c2ad46530ddc1978
|
7
|
+
data.tar.gz: 5216c72900a99522c7f49ac48166f85167bfecaf087c2d2e3891abfeaad44adbe378e1230cc87569d7e99ce9f1f4bd318de708eeff615218c23449c48f345dfd
|
data/History.txt
CHANGED
@@ -2,6 +2,13 @@ TODO / Backlog
|
|
2
2
|
* refactor various hardcoded constant pixel offsets in Graph class to use named constants or variables
|
3
3
|
* Fix bug in Plot where min/max_x/y_value are not respected, TODO
|
4
4
|
|
5
|
+
=== 2.2.3 /
|
6
|
+
|
7
|
+
=== 2.2.2 / 2023-04-30
|
8
|
+
* fix line9 color typo in Line.rb [thanks, akostadinov #42]
|
9
|
+
* anchor right y labels [thanks, akostadinov #44]
|
10
|
+
* start line from first point, not 0 0 [thanks, akostadinov #43]
|
11
|
+
|
5
12
|
=== 2.2.1 / 2020-12-25
|
6
13
|
* Remove inline styling for data point labels and popups [thanks marnen, PR #23]
|
7
14
|
* fix #29 text background not aligned close to axis due to missing anchors
|
data/lib/SVG/Graph/Graph.rb
CHANGED
@@ -908,7 +908,10 @@ module SVG
|
|
908
908
|
if show_y_labels
|
909
909
|
# x = 0, y = 0 is top left right next to graph area
|
910
910
|
y = y_offset - (label_height * count)
|
911
|
-
|
911
|
+
# instead of calculating the middle anchor position, simply use
|
912
|
+
# static offset and anchor end to right-align the labels. See line :936 below.
|
913
|
+
#x = -label_width/2.0 + y_label_font_size/2.0
|
914
|
+
x = 3
|
912
915
|
|
913
916
|
if stagger_y_labels and count % 2 == 1
|
914
917
|
x -= stagger
|
@@ -929,7 +932,8 @@ module SVG
|
|
929
932
|
end
|
930
933
|
text.text = textStr
|
931
934
|
# note text-anchor is at bottom of textfield
|
932
|
-
text.attributes["style"] = "text-anchor: middle"
|
935
|
+
#text.attributes["style"] = "text-anchor: middle"
|
936
|
+
text.attributes["style"] = "text-anchor: end"
|
933
937
|
degrees = rotate_y_labels
|
934
938
|
text.attributes["transform"] = "translate( -#{font_size} 0 ) " +
|
935
939
|
"rotate( #{degrees} #{x} #{y} ) "
|
data/lib/SVG/Graph/Line.rb
CHANGED
@@ -42,7 +42,7 @@ module SVG
|
|
42
42
|
#
|
43
43
|
# = Examples
|
44
44
|
#
|
45
|
-
#
|
45
|
+
# https://github.com/lumean/svg-graph2/blob/master/examples/line.rb
|
46
46
|
#
|
47
47
|
# = Notes
|
48
48
|
# Only number of fileds datapoints will be drawn, additional data values
|
@@ -238,8 +238,9 @@ module SVG
|
|
238
238
|
})
|
239
239
|
end
|
240
240
|
|
241
|
+
matcher = /^(\S+ \S+) (.*)/.match lpath
|
241
242
|
@graph.add_element("path", {
|
242
|
-
"d" => "
|
243
|
+
"d" => "M#{matcher[1]} L#{matcher[2]}",
|
243
244
|
"class" => "line#{line}"
|
244
245
|
})
|
245
246
|
|
@@ -319,7 +320,7 @@ module SVG
|
|
319
320
|
}
|
320
321
|
.line9{
|
321
322
|
fill: none;
|
322
|
-
stroke: #
|
323
|
+
stroke: #cc6666;
|
323
324
|
stroke-width: 1px;
|
324
325
|
}
|
325
326
|
.line10{
|
data/lib/SVG/Graph/Pie.rb
CHANGED
data/lib/SVG/Graph/Plot.rb
CHANGED
@@ -55,7 +55,7 @@ module SVG
|
|
55
55
|
#
|
56
56
|
# = Examples
|
57
57
|
#
|
58
|
-
#
|
58
|
+
# https://github.com/lumean/svg-graph2/blob/master/examples/plot.rb
|
59
59
|
#
|
60
60
|
# = Notes
|
61
61
|
#
|
@@ -180,6 +180,9 @@ module SVG
|
|
180
180
|
"The data provided contained an odd set of "+
|
181
181
|
"data points" unless conf[:data].length % 2 == 0
|
182
182
|
|
183
|
+
# clear the min/max x/y range caches
|
184
|
+
clear_cache
|
185
|
+
|
183
186
|
# remove nil values
|
184
187
|
conf[:data] = conf[:data].compact
|
185
188
|
|
@@ -223,24 +226,37 @@ module SVG
|
|
223
226
|
X = 0
|
224
227
|
Y = 1
|
225
228
|
|
229
|
+
# procedure to clear all the cached variables used in working out the
|
230
|
+
# max and min ranges for the chart
|
231
|
+
def clear_cache
|
232
|
+
@max_x_cache = @min_x_cache = @max_y_cache = @min_y_cache = nil
|
233
|
+
end
|
234
|
+
|
226
235
|
def max_x_range
|
236
|
+
return @max_x_cache unless @max_x_cache.nil?
|
237
|
+
|
227
238
|
# needs to be computed fresh when called, to cover the use-case:
|
228
239
|
# add_data -> burn -> add_data -> burn
|
229
240
|
# when values would be cached, the graph is not updated for second burning
|
230
241
|
max_value = @data.collect{|x| x[:data][X][-1] }.max
|
231
242
|
max_value = max_value > max_x_value ? max_value : max_x_value if max_x_value
|
232
|
-
|
243
|
+
@max_x_cache = max_value
|
244
|
+
@max_x_cache
|
233
245
|
end
|
234
246
|
|
235
247
|
def min_x_range
|
248
|
+
return @min_x_cache unless @min_x_cache.nil?
|
249
|
+
|
236
250
|
# needs to be computed fresh when called, to cover the use-case:
|
237
251
|
# add_data -> burn -> add_data -> burn
|
238
252
|
# when values would be cached, the graph is not updated for second burning
|
239
253
|
min_value = @data.collect{|x| x[:data][X][0] }.min
|
240
254
|
min_value = min_value < min_x_value ? min_value : min_x_value if min_x_value
|
241
|
-
|
255
|
+
@min_x_cache = min_value
|
256
|
+
@min_x_cache
|
242
257
|
end
|
243
258
|
|
259
|
+
# calculate the min and max x value as well as the scale division used for the x-axis
|
244
260
|
def x_label_range
|
245
261
|
max_value = max_x_range
|
246
262
|
min_value = min_x_range
|
@@ -253,6 +269,7 @@ module SVG
|
|
253
269
|
end
|
254
270
|
scale_range = max_value - min_value
|
255
271
|
|
272
|
+
# either use the given step size or by default do 9 divisions.
|
256
273
|
scale_division = scale_x_divisions || (scale_range / 9.0)
|
257
274
|
@x_offset = 0
|
258
275
|
|
@@ -265,10 +282,13 @@ module SVG
|
|
265
282
|
[min_value, max_value, scale_division]
|
266
283
|
end
|
267
284
|
|
285
|
+
# get array of values for the x axis divisions, assuming left-most value starts
|
286
|
+
# exactly where the graph starts.
|
268
287
|
def get_x_values
|
269
288
|
min_value, max_value, @x_scale_division = x_label_range
|
289
|
+
x_times = ((max_value-min_value)/@x_scale_division).round + 1
|
270
290
|
rv = []
|
271
|
-
|
291
|
+
x_times.times{|v| rv << (min_value + (v * @x_scale_division))}
|
272
292
|
return rv
|
273
293
|
end
|
274
294
|
alias :get_x_labels :get_x_values
|
@@ -281,18 +301,24 @@ module SVG
|
|
281
301
|
end
|
282
302
|
|
283
303
|
def max_y_range
|
304
|
+
return @max_y_cache unless @max_y_cache.nil?
|
305
|
+
|
284
306
|
max_value = @data.collect{|x| x[:data][Y].max }.max
|
285
307
|
max_value = max_value > max_y_value ? max_value : max_y_value if max_y_value
|
286
|
-
|
308
|
+
@max_y_cache = max_value
|
309
|
+
@max_y_cache
|
287
310
|
end
|
288
311
|
|
289
312
|
def min_y_range
|
313
|
+
return @min_y_cache unless @min_y_cache.nil?
|
314
|
+
|
290
315
|
# needs to be computed fresh when called, to cover the use-case:
|
291
316
|
# add_data -> burn -> add_data -> burn
|
292
317
|
# when values would be cached, the graph is not updated for second burning
|
293
318
|
min_value = @data.collect{|x| x[:data][Y].min }.min
|
294
319
|
min_value = min_value < min_y_value ? min_value : min_y_value if min_y_value
|
295
|
-
|
320
|
+
@min_y_cache = min_value
|
321
|
+
@min_y_cache
|
296
322
|
end
|
297
323
|
|
298
324
|
def y_label_range
|
@@ -345,6 +371,7 @@ module SVG
|
|
345
371
|
@graph_height.to_f / (values.length - 1)
|
346
372
|
end
|
347
373
|
|
374
|
+
# calculates the x,y coordinates of a datapoint in the plot area
|
348
375
|
def calc_coords(x, y)
|
349
376
|
coords = {:x => 0, :y => 0}
|
350
377
|
# scale the coordinates, use float division / multiplication
|
data/lib/SVG/Graph/Schedule.rb
CHANGED
data/lib/SVG/Graph/TimeSeries.rb
CHANGED
@@ -60,7 +60,7 @@ module SVG
|
|
60
60
|
#
|
61
61
|
# = Examples
|
62
62
|
#
|
63
|
-
#
|
63
|
+
# https://github.com/lumean/svg-graph2/blob/master/examples/timeseries.rb
|
64
64
|
#
|
65
65
|
# = Notes
|
66
66
|
#
|
@@ -249,12 +249,12 @@ module SVG
|
|
249
249
|
step = amount
|
250
250
|
end
|
251
251
|
# only do this if division_units is not year or month. Those are done already above in the cases.
|
252
|
-
min.step( max, step ) {|v| rv << v} if step
|
252
|
+
min.step( max + (step/10), step ) {|v| rv << v} if step
|
253
253
|
@x_scale_division = step if step
|
254
254
|
return rv
|
255
255
|
end
|
256
256
|
end
|
257
|
-
min.step( max , @x_scale_division ) {|v| rv << v}
|
257
|
+
min.step( max + (@x_scale_division/10), @x_scale_division ) {|v| rv << v}
|
258
258
|
return rv
|
259
259
|
end # get_x_values
|
260
260
|
|
data/lib/svggraph.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: svg-graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Russell
|
@@ -9,10 +9,10 @@ authors:
|
|
9
9
|
- Liehann Loots
|
10
10
|
- Piergiuliano Bossi
|
11
11
|
- Manuel Widmer
|
12
|
-
autorequire:
|
12
|
+
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2023-04-30 00:00:00.000000000 Z
|
16
16
|
dependencies: []
|
17
17
|
description: "Gem version of SVG:::Graph. SVG:::Graph is a pure Ruby library for generating
|
18
18
|
charts,\nwhich are a type of graph where the values of one axis are not scalar.
|
@@ -57,7 +57,7 @@ homepage: https://github.com/lumean/svg-graph2
|
|
57
57
|
licenses:
|
58
58
|
- GPL-2.0
|
59
59
|
metadata: {}
|
60
|
-
post_install_message:
|
60
|
+
post_install_message:
|
61
61
|
rdoc_options: []
|
62
62
|
require_paths:
|
63
63
|
- lib
|
@@ -72,8 +72,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '0'
|
74
74
|
requirements: []
|
75
|
-
rubygems_version: 3.
|
76
|
-
signing_key:
|
75
|
+
rubygems_version: 3.2.3
|
76
|
+
signing_key:
|
77
77
|
specification_version: 4
|
78
78
|
summary: SVG:::Graph is a pure Ruby library for generating charts, which are a type
|
79
79
|
of graph where the values of one axis are not scalar.
|