sparklines 0.5.0 → 0.5.1
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.
- data/CHANGELOG +5 -0
- data/lib/sparklines.rb +76 -52
- metadata +5 -5
data/CHANGELOG
CHANGED
data/lib/sparklines.rb
CHANGED
@@ -75,7 +75,7 @@ Licensed under the MIT license.
|
|
75
75
|
=end
|
76
76
|
class Sparklines
|
77
77
|
|
78
|
-
VERSION = '0.5.
|
78
|
+
VERSION = '0.5.1'
|
79
79
|
|
80
80
|
@@label_margin = 5.0
|
81
81
|
@@pointsize = 10.0
|
@@ -87,29 +87,29 @@ class Sparklines
|
|
87
87
|
|
88
88
|
def plot_to_image(data=[], options={})
|
89
89
|
defaults = {
|
90
|
-
:type
|
91
|
-
:height
|
92
|
-
:upper
|
93
|
-
:diameter
|
94
|
-
:step
|
95
|
-
:line_color
|
96
|
-
|
97
|
-
:above_color
|
98
|
-
:below_color
|
90
|
+
:type => 'smooth',
|
91
|
+
:height => 14,
|
92
|
+
:upper => 50,
|
93
|
+
:diameter => 20,
|
94
|
+
:step => 2,
|
95
|
+
:line_color => 'lightgrey',
|
96
|
+
|
97
|
+
:above_color => 'red',
|
98
|
+
:below_color => 'grey',
|
99
99
|
:background_color => 'white',
|
100
|
-
:share_color
|
101
|
-
:remain_color
|
102
|
-
:min_color
|
103
|
-
:max_color
|
104
|
-
:last_color
|
105
|
-
:std_dev_color
|
106
|
-
|
107
|
-
:has_min
|
108
|
-
:has_max
|
109
|
-
:has_last
|
110
|
-
:has_std_dev
|
111
|
-
|
112
|
-
:label
|
100
|
+
:share_color => 'red',
|
101
|
+
:remain_color => 'lightgrey',
|
102
|
+
:min_color => 'blue',
|
103
|
+
:max_color => 'green',
|
104
|
+
:last_color => 'red',
|
105
|
+
:std_dev_color => '#efefef',
|
106
|
+
|
107
|
+
:has_min => false,
|
108
|
+
:has_max => false,
|
109
|
+
:has_last => false,
|
110
|
+
:has_std_dev => false,
|
111
|
+
|
112
|
+
:label => nil
|
113
113
|
}
|
114
114
|
|
115
115
|
# HACK for HashWithIndifferentAccess
|
@@ -139,10 +139,10 @@ class Sparklines
|
|
139
139
|
def plot(data=[], options={})
|
140
140
|
plot_to_image(data, options).to_blob
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
##
|
144
144
|
# Writes a graph to disk with the specified filename, or "sparklines.png".
|
145
|
-
|
145
|
+
|
146
146
|
def plot_to_file(filename="sparklines.png", data=[], options={})
|
147
147
|
File.open( filename, 'wb' ) do |png|
|
148
148
|
png << self.plot( data, options)
|
@@ -251,28 +251,44 @@ class Sparklines
|
|
251
251
|
|
252
252
|
##
|
253
253
|
# A bar graph.
|
254
|
+
#
|
255
|
+
# Also takes :target option (a line will be drawn) and :upper (values
|
256
|
+
# under will be drawn in :below_color, above in :above_color).
|
254
257
|
|
255
258
|
def bar
|
256
|
-
step
|
257
|
-
height
|
259
|
+
step = @options[:step].to_f
|
260
|
+
height = @options[:height].to_f
|
261
|
+
width = ((@norm_data.size - 1) * step).to_f
|
258
262
|
background_color = @options[:background_color]
|
259
263
|
|
260
264
|
create_canvas(@norm_data.length * step + 2, height, background_color)
|
261
265
|
|
262
|
-
upper
|
263
|
-
below_color
|
264
|
-
above_color
|
266
|
+
upper = @options[:upper].to_f
|
267
|
+
below_color = @options[:below_color]
|
268
|
+
above_color = @options[:above_color]
|
269
|
+
|
270
|
+
target = @options.has_key?(:target) ? @options[:target].to_f : nil
|
271
|
+
target_color = @options[:target_color] || 'white'
|
265
272
|
|
266
273
|
i = 1
|
274
|
+
# raise @norm_data.to_yaml
|
275
|
+
max_normalized = @norm_data.max
|
267
276
|
@norm_data.each_with_index do |r, index|
|
268
|
-
color = (
|
277
|
+
color = (@data[index] >= upper) ? above_color : below_color
|
269
278
|
@draw.stroke('transparent')
|
270
279
|
@draw.fill(color)
|
271
|
-
@
|
272
|
-
i
|
280
|
+
bar_height_from_top = @canvas.rows - ( (r.to_f / max_normalized.to_f) * @canvas.rows)
|
281
|
+
@draw.rectangle( i, @canvas.rows, i + step - 2, bar_height_from_top )
|
273
282
|
i += step
|
274
283
|
end
|
275
284
|
|
285
|
+
unless target.nil?
|
286
|
+
normalized_target_value = ((target.to_f - @minimum_value)/(@maximum_value - @minimum_value)) * 100.0
|
287
|
+
adjusted_target_value = (height - 3 - normalized_target_value/(101.0/(height-4))).to_i
|
288
|
+
@draw.stroke(target_color)
|
289
|
+
open_ended_polyline([[-5, adjusted_target_value], [width + 5, adjusted_target_value]])
|
290
|
+
end
|
291
|
+
|
276
292
|
@draw.draw(@canvas)
|
277
293
|
@canvas
|
278
294
|
end
|
@@ -415,28 +431,27 @@ class Sparklines
|
|
415
431
|
# :target - A 1px horizontal line will be drawn at this value. Useful for showing an average.
|
416
432
|
#
|
417
433
|
# :target_color - Color of the target line. Defaults to white.
|
418
|
-
|
419
|
-
def smooth
|
420
434
|
|
421
|
-
|
422
|
-
|
423
|
-
|
435
|
+
def smooth
|
436
|
+
step = @options[:step].to_f
|
437
|
+
height = @options[:height].to_f
|
438
|
+
width = ((@norm_data.size - 1) * step).to_f
|
424
439
|
|
425
440
|
background_color = @options[:background_color]
|
426
441
|
create_canvas(width, height, background_color)
|
427
442
|
|
428
|
-
min_color
|
429
|
-
max_color
|
430
|
-
last_color
|
431
|
-
has_min
|
432
|
-
has_max
|
433
|
-
has_last
|
434
|
-
line_color
|
435
|
-
has_std_dev
|
436
|
-
std_dev_color
|
443
|
+
min_color = @options[:min_color]
|
444
|
+
max_color = @options[:max_color]
|
445
|
+
last_color = @options[:last_color]
|
446
|
+
has_min = @options[:has_min]
|
447
|
+
has_max = @options[:has_max]
|
448
|
+
has_last = @options[:has_last]
|
449
|
+
line_color = @options[:line_color]
|
450
|
+
has_std_dev = @options[:has_std_dev]
|
451
|
+
std_dev_color = @options[:std_dev_color]
|
437
452
|
|
438
|
-
target
|
439
|
-
target_color
|
453
|
+
target = @options.has_key?(:target) ? @options[:target].to_f : nil
|
454
|
+
target_color = @options[:target_color] || 'white'
|
440
455
|
|
441
456
|
drawstddevbox(width,height,std_dev_color) if has_std_dev == true
|
442
457
|
|
@@ -477,7 +492,7 @@ class Sparklines
|
|
477
492
|
# No value produces an empty row to indicate a tie.
|
478
493
|
#
|
479
494
|
# * results - an array of integer values between -2 and 2. -2 is exceptional
|
480
|
-
# down, 1 is regular down, 0 is no value, 1 is up, and 2 is exceptional up.
|
495
|
+
# down, -1 is regular down, 0 is no value, 1 is up, and 2 is exceptional up.
|
481
496
|
# * options - a hash that takes parameters
|
482
497
|
#
|
483
498
|
# :height - height of the sparkline
|
@@ -485,6 +500,8 @@ class Sparklines
|
|
485
500
|
# :whisker_color - the color of regular whiskers; defaults to black
|
486
501
|
#
|
487
502
|
# :exception_color - the color of exceptional whiskers; defaults to red
|
503
|
+
#
|
504
|
+
# :step - Spacing for whiskers. Includes the whisker itself. Default 2.
|
488
505
|
|
489
506
|
def whisker
|
490
507
|
|
@@ -539,7 +556,7 @@ class Sparklines
|
|
539
556
|
# :height - Numeric. Defaults to 15. Should be a multiple of three.
|
540
557
|
#
|
541
558
|
# :width - This graph expands to any specified width. Defaults to 100.
|
542
|
-
#
|
559
|
+
#
|
543
560
|
# :bad - Numeric. A darker shade background will be drawn up to this point.
|
544
561
|
#
|
545
562
|
# :satisfactory - Numeric. A medium background will be drawn up to this point.
|
@@ -609,8 +626,15 @@ class Sparklines
|
|
609
626
|
private
|
610
627
|
|
611
628
|
def normalize_data
|
612
|
-
|
629
|
+
case @options[:type].to_s
|
630
|
+
when 'bar'
|
631
|
+
@minimum_value = 0.0
|
632
|
+
else
|
633
|
+
@minimum_value = @data.min
|
634
|
+
end
|
635
|
+
|
613
636
|
@maximum_value = @data.max
|
637
|
+
|
614
638
|
case @options[:type].to_s
|
615
639
|
when 'pie'
|
616
640
|
@norm_data = @data
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparklines
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
5
|
-
platform:
|
4
|
+
version: 0.5.1
|
5
|
+
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geoffrey Grosenbach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-05-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.5.1
|
23
23
|
version:
|
24
24
|
description: Tiny graphs.
|
25
25
|
email: boss@topfunky.com
|
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
requirements: []
|
119
119
|
|
120
120
|
rubyforge_project: sparklines
|
121
|
-
rubygems_version:
|
121
|
+
rubygems_version: 1.1.1
|
122
122
|
signing_key:
|
123
123
|
specification_version: 2
|
124
124
|
summary: Tiny graphs.
|