sparklines 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/lib/sparklines.rb +27 -17
- data/test/test_all.rb +95 -84
- metadata +3 -3
data/CHANGELOG
CHANGED
data/lib/sparklines.rb
CHANGED
@@ -74,7 +74,7 @@ Licensed under the MIT license.
|
|
74
74
|
=end
|
75
75
|
class Sparklines
|
76
76
|
|
77
|
-
VERSION = '0.4.
|
77
|
+
VERSION = '0.4.6'
|
78
78
|
|
79
79
|
@@label_margin = 5.0
|
80
80
|
@@pointsize = 10.0
|
@@ -102,12 +102,12 @@ class Sparklines
|
|
102
102
|
:max_color => 'green',
|
103
103
|
:last_color => 'red',
|
104
104
|
:std_dev_color => '#efefef',
|
105
|
-
|
105
|
+
|
106
106
|
:has_min => false,
|
107
107
|
:has_max => false,
|
108
108
|
:has_last => false,
|
109
109
|
:has_std_dev => false,
|
110
|
-
|
110
|
+
|
111
111
|
:label => nil
|
112
112
|
}
|
113
113
|
|
@@ -284,7 +284,7 @@ class Sparklines
|
|
284
284
|
|
285
285
|
width = @norm_data.size * step - 1
|
286
286
|
|
287
|
-
create_canvas(
|
287
|
+
create_canvas(@norm_data.size * step - 1, height, background_color)
|
288
288
|
|
289
289
|
below_color = @options[:below_color]
|
290
290
|
above_color = @options[:above_color]
|
@@ -373,7 +373,6 @@ class Sparklines
|
|
373
373
|
@canvas.to_blob
|
374
374
|
end
|
375
375
|
|
376
|
-
|
377
376
|
##
|
378
377
|
# Creates a smooth sparkline.
|
379
378
|
#
|
@@ -396,15 +395,15 @@ class Sparklines
|
|
396
395
|
# :last_color - A string or color code representing the color that the dot drawn at the last value will be displayed as. Defaults to red.
|
397
396
|
#
|
398
397
|
# :std_dev_color - A string or color code representing the color that the standard deviation bar behind the smooth graph will be displayed as. Defaults to #efefef
|
399
|
-
|
398
|
+
#
|
399
|
+
# :underneath_color - A string or color code representing the color that will be used to fill in the area underneath the line. Optional.
|
400
400
|
def smooth
|
401
401
|
|
402
402
|
step = @options[:step].to_f
|
403
403
|
height = @options[:height].to_f
|
404
|
+
width = ((@norm_data.size - 1) * step).to_f
|
405
|
+
|
404
406
|
background_color = @options[:background_color]
|
405
|
-
|
406
|
-
width = (@norm_data.size - 1) * step + 4
|
407
|
-
|
408
407
|
create_canvas(width, height, background_color)
|
409
408
|
|
410
409
|
min_color = @options[:min_color]
|
@@ -423,23 +422,24 @@ class Sparklines
|
|
423
422
|
coords = []
|
424
423
|
i=0
|
425
424
|
@norm_data.each do |r|
|
426
|
-
coords.push [
|
425
|
+
coords.push [ i, (height - 3 - r/(101.0/(height-4))) ]
|
427
426
|
i += step
|
428
427
|
end
|
429
428
|
|
430
|
-
|
429
|
+
if @options[:underneath_color]
|
430
|
+
closed_polygon(height, width, coords)
|
431
|
+
else
|
432
|
+
open_ended_polyline(coords)
|
433
|
+
end
|
431
434
|
|
432
435
|
drawbox(coords[@norm_data.index(@norm_data.min)], 2, min_color) if has_min == true
|
433
|
-
|
434
436
|
drawbox(coords[@norm_data.index(@norm_data.max)], 2, max_color) if has_max == true
|
435
|
-
|
436
437
|
drawbox(coords[-1], 2, last_color) if has_last == true
|
437
438
|
|
438
439
|
@draw.draw(@canvas)
|
439
440
|
@canvas.to_blob
|
440
441
|
end
|
441
|
-
|
442
|
-
|
442
|
+
|
443
443
|
##
|
444
444
|
# Creates a whisker sparkline to track on/off type data. There are five states:
|
445
445
|
# on, off, no value, exceptional on, exceptional off. On values create an up
|
@@ -533,7 +533,18 @@ private
|
|
533
533
|
@draw.line(arr[i][0], arr[i][1], arr[i+1][0], arr[i+1][1])
|
534
534
|
}
|
535
535
|
end
|
536
|
-
|
536
|
+
|
537
|
+
# Fills in the area under the line (used for a smooth graph)
|
538
|
+
def closed_polygon(height, width, coords)
|
539
|
+
return if @options[:underneath_color].nil?
|
540
|
+
list = []
|
541
|
+
list << [0, height]
|
542
|
+
list << coords
|
543
|
+
list << [width, height]
|
544
|
+
@draw.fill( @options[:underneath_color] )
|
545
|
+
@draw.polygon( *list.flatten )
|
546
|
+
end
|
547
|
+
|
537
548
|
##
|
538
549
|
# Create an image to draw on and a drawable to do the drawing with.
|
539
550
|
#
|
@@ -646,4 +657,3 @@ private
|
|
646
657
|
|
647
658
|
|
648
659
|
end
|
649
|
-
|
data/test/test_all.rb
CHANGED
@@ -9,32 +9,32 @@ class SparklinesTest < Test::Unit::TestCase
|
|
9
9
|
def setup
|
10
10
|
@output_dir = "test/output"
|
11
11
|
FileUtils.mkdir_p(@output_dir)
|
12
|
-
|
13
|
-
@data = %w( 1 5 15 20 30 50 57 58 55 48
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
|
13
|
+
@data = %w( 1 5 15 20 30 50 57 58 55 48
|
14
|
+
44 43 42 42 46 48 49 53 55 59
|
15
|
+
60 65 75 90 105 106 107 110 115 120
|
16
|
+
115 120 130 140 150 160 170 100 100 10).map {|i| i.to_f}
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_each_graph
|
20
20
|
%w{pie area discrete smooth bar}.each do |type|
|
21
|
-
|
21
|
+
quick_graph("#{type}", :type => type)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_each_graph_with_label
|
26
26
|
%w{pie area discrete smooth bar}.each do |type|
|
27
|
-
|
27
|
+
quick_graph("labeled_#{type}", :type => type, :label => 'Glucose')
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_whisker_decimals
|
32
32
|
@data = (1..200).map {|n| n.to_f/100 }
|
33
|
-
quick_graph("labeled_whisker_decimals",
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
quick_graph("labeled_whisker_decimals", {
|
34
|
+
:height => 30,
|
35
|
+
:type => 'smooth',
|
36
|
+
:label => 'png'
|
37
|
+
})
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_whisker_random
|
@@ -50,7 +50,7 @@ class SparklinesTest < Test::Unit::TestCase
|
|
50
50
|
|
51
51
|
##
|
52
52
|
# Send random values in the range (-9..9)
|
53
|
-
|
53
|
+
|
54
54
|
def test_whisker_junk
|
55
55
|
@data = (1..40).map { |i| rand(10) * (rand(2) == 1 ? -1 : 1) }
|
56
56
|
quick_graph("whisker_junk", :type => 'whisker')
|
@@ -59,85 +59,96 @@ class SparklinesTest < Test::Unit::TestCase
|
|
59
59
|
def test_pie
|
60
60
|
# Test extremes which previously did not work right
|
61
61
|
[0, 1, 45, 95, 99, 100].each do |value|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
Sparklines.plot_to_file("#{@output_dir}/pie#{value}.png",
|
63
|
+
value, {
|
64
|
+
:type => 'pie',
|
65
|
+
:diameter => 128
|
66
|
+
})
|
66
67
|
end
|
67
|
-
Sparklines.plot_to_file("#{@output_dir}/pie_flat.png",
|
68
|
-
|
69
|
-
|
68
|
+
Sparklines.plot_to_file("#{@output_dir}/pie_flat.png",
|
69
|
+
[60],
|
70
|
+
{
|
71
|
+
:type => 'pie'
|
72
|
+
})
|
70
73
|
end
|
71
|
-
|
74
|
+
|
72
75
|
def test_special_conditions
|
73
|
-
tests = { 'smooth_colored' =>
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
76
|
+
tests = { 'smooth_colored' =>
|
77
|
+
{
|
78
|
+
:type => 'smooth',
|
79
|
+
:line_color => 'purple'
|
80
|
+
},
|
81
|
+
'pie_large' => {
|
82
|
+
:type => 'pie',
|
83
|
+
:diameter => 200
|
84
|
+
},
|
85
|
+
'area_high' => {
|
86
|
+
:type => 'area',
|
87
|
+
:upper => 80,
|
88
|
+
:step => 4,
|
89
|
+
:height => 20
|
90
|
+
},
|
91
|
+
'discrete_wide' => {
|
92
|
+
:type => 'discrete',
|
93
|
+
:step => 8
|
94
|
+
},
|
95
|
+
'bar_wide' => {
|
96
|
+
:type => 'bar',
|
97
|
+
:step => 8
|
98
|
+
},
|
99
|
+
'bar_tall' => {
|
100
|
+
:type => 'bar',
|
101
|
+
:below_color => 'blue',
|
102
|
+
:above_color => 'red',
|
103
|
+
:upper => 90,
|
104
|
+
:height => 50,
|
105
|
+
:step => 8
|
106
|
+
}
|
107
|
+
}
|
104
108
|
tests.each do |name, options|
|
105
|
-
|
109
|
+
quick_graph(name, options)
|
106
110
|
end
|
107
111
|
end
|
108
|
-
|
109
|
-
# def test_smooth_graph
|
110
|
-
#
|
111
|
-
# end
|
112
|
-
|
112
|
+
|
113
113
|
def test_bar_extreme_values
|
114
|
-
Sparklines.plot_to_file("#{@output_dir}/bar_extreme_values.png",
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
114
|
+
Sparklines.plot_to_file("#{@output_dir}/bar_extreme_values.png",
|
115
|
+
[0,1,100,2,99,3,98,4,97,5,96,6,95,7,94,8,93,9,92,10,91], {
|
116
|
+
:type => 'bar',
|
117
|
+
:below_color => 'blue',
|
118
|
+
:above_color => 'red',
|
119
|
+
:upper => 90,
|
120
|
+
:step => 4
|
121
|
+
})
|
122
|
+
end
|
123
|
+
|
123
124
|
def test_string_args
|
124
|
-
quick_graph("bar_string.png",
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
125
|
+
quick_graph("bar_string.png", {
|
126
|
+
'type' => 'bar',
|
127
|
+
'below_color' => 'blue',
|
128
|
+
'above_color' => 'red',
|
129
|
+
'upper' => 50,
|
130
|
+
'height' => 50,
|
131
|
+
'step' => 8
|
132
|
+
})
|
131
133
|
end
|
132
134
|
|
133
135
|
def test_area_min_max
|
134
|
-
quick_graph("area_min_max",
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
136
|
+
quick_graph("area_min_max", {
|
137
|
+
:has_min => true,
|
138
|
+
:has_max => true,
|
139
|
+
:has_first => true,
|
140
|
+
:has_last => true
|
141
|
+
})
|
139
142
|
end
|
140
|
-
|
143
|
+
|
144
|
+
def test_smooth_underneath_color
|
145
|
+
quick_graph("smooth_underneath_color", {
|
146
|
+
:type => 'smooth',
|
147
|
+
:line_color => "#6699cc",
|
148
|
+
:underneath_color => "#ebf3f6"
|
149
|
+
})
|
150
|
+
end
|
151
|
+
|
141
152
|
|
142
153
|
def test_no_type
|
143
154
|
Sparklines.plot_to_file("#{@output_dir}/error.png", 0, :type => 'nonexistent')
|
@@ -150,7 +161,7 @@ class SparklinesTest < Test::Unit::TestCase
|
|
150
161
|
:line_color => '#666',
|
151
162
|
:has_std_dev => true,
|
152
163
|
:std_dev_color => '#cccccc'
|
153
|
-
})
|
164
|
+
})
|
154
165
|
end
|
155
166
|
|
156
167
|
def test_standard_deviation_tall
|
@@ -160,7 +171,7 @@ class SparklinesTest < Test::Unit::TestCase
|
|
160
171
|
:line_color => '#666',
|
161
172
|
:has_std_dev => true,
|
162
173
|
:std_dev_color => '#cccccc'
|
163
|
-
})
|
174
|
+
})
|
164
175
|
end
|
165
176
|
|
166
177
|
def test_standard_deviation_short
|
@@ -170,10 +181,10 @@ class SparklinesTest < Test::Unit::TestCase
|
|
170
181
|
:line_color => '#666',
|
171
182
|
:has_std_dev => true,
|
172
183
|
:std_dev_color => '#cccccc'
|
173
|
-
})
|
184
|
+
})
|
174
185
|
end
|
175
186
|
|
176
|
-
private
|
187
|
+
private
|
177
188
|
|
178
189
|
def quick_graph(name, options)
|
179
190
|
Sparklines.plot_to_file("#{@output_dir}/#{name}.png", @data, options)
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: sparklines
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.4.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.4.6
|
7
|
+
date: 2007-10-12 00:00:00 -07:00
|
8
8
|
summary: Tiny graphs.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -71,5 +71,5 @@ dependencies:
|
|
71
71
|
requirements:
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 1.
|
74
|
+
version: 1.3.0
|
75
75
|
version:
|