sparklines 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|