lilygraph 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.3.0
@@ -80,7 +80,7 @@
80
80
 
81
81
  <div id="description">
82
82
  <p>
83
- This is the main graph to use if you want to create a graph!
83
+ This is the main class to use if you want to create a graph!
84
84
  </p>
85
85
  <pre>
86
86
  graph = Lilygraph.new(:title =&gt; &quot;My Awesome Graph&quot;)
@@ -142,6 +142,55 @@ Default options for the initializer
142
142
 
143
143
  <div class="name-list">
144
144
  <table>
145
+ <tr class="top-aligned-row context-row">
146
+ <td class="context-item-name">colors</td>
147
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
148
+ <td class="context-item-desc">
149
+ This allows you to set colors for the bars.
150
+
151
+ <p>
152
+ If you just want a single color:
153
+ </p>
154
+ <pre>
155
+ graph.colors='#0000aa'
156
+ </pre>
157
+ <p>
158
+ If you want to make each bar (or bar group) different colors:
159
+ </p>
160
+ <pre>
161
+ graph.colors=['#aa0000','#00aa00','#0000aa']
162
+ </pre>
163
+ <p>
164
+ If you want every bar group to be the same, but each bar in the groups to
165
+ have a different color
166
+ </p>
167
+ <pre>
168
+ graph.colors=[['#aa0000','#00aa00','#0000aa']]
169
+ </pre>
170
+ <p>
171
+ If you want to set every bar group color:
172
+ </p>
173
+ <pre>
174
+ graph.colors=[['#aa0000','#00aa00','#0000aa'],['#bb0000','#00bb00','#0000bb']]
175
+ </pre>
176
+ <p>
177
+ Last but not least you can set the color value to any object that responds
178
+ to call (like a Proc). The proc takes four arguments. data_index: The index
179
+ of the current bar (or group) number_index: The index of the current bar
180
+ INSIDE of the current bar group (always 0 if you don&#8216;t have grouped
181
+ bars) data_size: total number of bar or groups. number_size: total number
182
+ of bars in the current group (always 1 if you don&#8216;t have bar groups)
183
+ </p>
184
+ <p>
185
+ The default proc looks like:
186
+ </p>
187
+ <pre>
188
+ graph.colors=Proc.new do |data_index, number_index, data_size, number_size|
189
+ Color::HSL.from_fraction(Float(data_index) / Float(data_size), 1.0, 0.4 + (Float(number_index) / Float(number_size) * 0.4)).to_rgb.html
190
+ end
191
+ </pre>
192
+ </td>
193
+ </tr>
145
194
  <tr class="top-aligned-row context-row">
146
195
  <td class="context-item-name">data</td>
147
196
  <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
@@ -10,11 +10,15 @@
10
10
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/lilygraph.rb, line 55</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/lilygraph.rb, line 77</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span> = {})
15
15
  <span class="ruby-ivar">@options</span> = <span class="ruby-constant">DEFAULT_OPTIONS</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">options</span>)
16
16
  <span class="ruby-ivar">@data</span> = []
17
17
  <span class="ruby-ivar">@labels</span> = []
18
+
19
+ <span class="ruby-ivar">@colors</span> = <span class="ruby-constant">Proc</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">data_index</span>, <span class="ruby-identifier">number_index</span>, <span class="ruby-identifier">data_size</span>, <span class="ruby-identifier">number_size</span><span class="ruby-operator">|</span>
20
+ <span class="ruby-constant">Color</span><span class="ruby-operator">::</span><span class="ruby-constant">HSL</span>.<span class="ruby-identifier">from_fraction</span>(<span class="ruby-constant">Float</span>(<span class="ruby-identifier">data_index</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">Float</span>(<span class="ruby-identifier">data_size</span>), <span class="ruby-value">1.0</span>, <span class="ruby-value">0</span><span class="ruby-value">.4</span> <span class="ruby-operator">+</span> (<span class="ruby-constant">Float</span>(<span class="ruby-identifier">number_index</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">Float</span>(<span class="ruby-identifier">number_size</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.4</span>)).<span class="ruby-identifier">to_rgb</span>.<span class="ruby-identifier">html</span>
21
+ <span class="ruby-keyword kw">end</span>
18
22
  <span class="ruby-keyword kw">end</span></pre>
19
23
  </body>
20
24
  </html>
@@ -10,7 +10,7 @@
10
10
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/lilygraph.rb, line 63</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/lilygraph.rb, line 89</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">update_options</span>(<span class="ruby-identifier">options</span> = {})
15
15
  <span class="ruby-ivar">@options</span> = <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">options</span>)
16
16
  <span class="ruby-keyword kw">end</span></pre>
@@ -10,7 +10,7 @@
10
10
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/lilygraph.rb, line 75</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/lilygraph.rb, line 101</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>
15
15
  <span class="ruby-identifier">output</span> = <span class="ruby-value str">&quot;&quot;</span>
16
16
  <span class="ruby-identifier">xml</span> = <span class="ruby-constant">Builder</span><span class="ruby-operator">::</span><span class="ruby-constant">XmlMarkup</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:target</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">output</span>, <span class="ruby-identifier">:indent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:indent</span>])
@@ -81,13 +81,26 @@
81
81
 
82
82
  <span class="ruby-comment cmt"># Rectangles</span>
83
83
  <span class="ruby-identifier">data</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">number</span>, <span class="ruby-identifier">number_index</span><span class="ruby-operator">|</span>
84
- <span class="ruby-identifier">color</span> = <span class="ruby-constant">Color</span><span class="ruby-operator">::</span><span class="ruby-constant">HSL</span>.<span class="ruby-identifier">from_fraction</span>(<span class="ruby-identifier">data_index</span> <span class="ruby-operator">*</span> (<span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">size</span>),<span class="ruby-value">1.0</span>, <span class="ruby-value">0</span><span class="ruby-value">.4</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">number_index</span> <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.2</span>)).<span class="ruby-identifier">to_rgb</span>
84
+ <span class="ruby-identifier">color</span> = <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@colors</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:call</span>
85
+ <span class="ruby-ivar">@colors</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">data_index</span>, <span class="ruby-identifier">number_index</span>, <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">size</span>, <span class="ruby-identifier">data</span>.<span class="ruby-identifier">size</span>)
86
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@colors</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Array</span>
87
+ <span class="ruby-identifier">first</span> = <span class="ruby-ivar">@colors</span>[<span class="ruby-identifier">data_index</span> <span class="ruby-operator">%</span> (<span class="ruby-ivar">@colors</span>.<span class="ruby-identifier">size</span>)]
88
+
89
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Array</span>
90
+ <span class="ruby-identifier">first</span>[<span class="ruby-identifier">number_index</span> <span class="ruby-operator">%</span> (<span class="ruby-identifier">first</span>.<span class="ruby-identifier">size</span>)]
91
+ <span class="ruby-keyword kw">else</span>
92
+ <span class="ruby-identifier">first</span>
93
+ <span class="ruby-keyword kw">end</span>
94
+ <span class="ruby-keyword kw">else</span>
95
+ <span class="ruby-ivar">@colors</span>
96
+ <span class="ruby-keyword kw">end</span>
97
+
85
98
  <span class="ruby-identifier">height</span> = ((<span class="ruby-identifier">dy</span> <span class="ruby-operator">/</span> <span class="ruby-value">10.0</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">number</span>).<span class="ruby-identifier">round</span>
86
99
 
87
100
  <span class="ruby-identifier">bar_x</span> = (<span class="ruby-identifier">x</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">dx</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">width</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">number_index</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">bar_width</span>)).<span class="ruby-identifier">round</span>
88
101
  <span class="ruby-identifier">bar_y</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:viewbox</span>][<span class="ruby-identifier">:height</span>] <span class="ruby-operator">-</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:margin</span>][<span class="ruby-identifier">:bottom</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">height</span>
89
102
 
90
- <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">rect</span> <span class="ruby-identifier">:fill</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">color</span>.<span class="ruby-identifier">html</span>, <span class="ruby-identifier">:stroke</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">color</span>.<span class="ruby-identifier">html</span>, <span class="ruby-value str">'stroke-width'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-identifier">:x</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bar_x</span>, <span class="ruby-identifier">:width</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bar_width</span>, <span class="ruby-identifier">:y</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bar_y</span>, <span class="ruby-identifier">:height</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">height</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
103
+ <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">rect</span> <span class="ruby-identifier">:fill</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">color</span>, <span class="ruby-identifier">:stroke</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">color</span>, <span class="ruby-value str">'stroke-width'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-identifier">:x</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bar_x</span>, <span class="ruby-identifier">:width</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bar_width</span>, <span class="ruby-identifier">:y</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bar_y</span>, <span class="ruby-identifier">:height</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">height</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
91
104
  <span class="ruby-keyword kw">end</span>
92
105
 
93
106
  <span class="ruby-comment cmt"># Text</span>
data/doc/created.rid CHANGED
@@ -1 +1 @@
1
- Wed, 19 Aug 2009 16:54:01 -0400
1
+ Thu, 20 Aug 2009 16:27:09 -0400
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Wed Aug 19 16:53:59 -0400 2009</td>
59
+ <td>Thu Aug 20 16:27:03 -0400 2009</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
data/lib/lilygraph.rb CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  require 'color'
6
6
 
7
- # This is the main graph to use if you want to create a graph!
7
+ # This is the main class to use if you want to create a graph!
8
8
  #
9
9
  # graph = Lilygraph.new(:title => "My Awesome Graph")
10
10
  # graph.data = [1,2,3]
@@ -39,6 +39,28 @@ class Lilygraph
39
39
  # For a grouped bar graph:
40
40
  # graph.data=[[1,10],[2,20],[3,30]]
41
41
  attr_accessor :data
42
+
43
+ # This allows you to set colors for the bars.
44
+ #
45
+ # If you just want a single color:
46
+ # graph.colors='#0000aa'
47
+ # If you want to make each bar (or bar group) different colors:
48
+ # graph.colors=['#aa0000','#00aa00','#0000aa']
49
+ # If you want every bar group to be the same, but each bar in the groups to have a different color
50
+ # graph.colors=[['#aa0000','#00aa00','#0000aa']]
51
+ # If you want to set every bar group color:
52
+ # graph.colors=[['#aa0000','#00aa00','#0000aa'],['#bb0000','#00bb00','#0000bb']]
53
+ # Last but not least you can set the color value to any object that responds to call (like a Proc). The proc takes four arguments.
54
+ # data_index: The index of the current bar (or group)
55
+ # number_index: The index of the current bar INSIDE of the current bar group (always 0 if you don't have grouped bars)
56
+ # data_size: total number of bar or groups.
57
+ # number_size: total number of bars in the current group (always 1 if you don't have bar groups)
58
+ #
59
+ # The default proc looks like:
60
+ # graph.colors=Proc.new do |data_index, number_index, data_size, number_size|
61
+ # Color::HSL.from_fraction(Float(data_index) / Float(data_size), 1.0, 0.4 + (Float(number_index) / Float(number_size) * 0.4)).to_rgb.html
62
+ # end
63
+ attr_accessor :colors
42
64
 
43
65
  # Returns a new graph creator with some default options specified via a hash:
44
66
  # height:: String to use as height parameter on the svg tag. Default is <tt>'100%'</tt>.
@@ -56,6 +78,10 @@ class Lilygraph
56
78
  @options = DEFAULT_OPTIONS.merge(options)
57
79
  @data = []
58
80
  @labels = []
81
+
82
+ @colors = Proc.new do |data_index, number_index, data_size, number_size|
83
+ Color::HSL.from_fraction(Float(data_index) / Float(data_size), 1.0, 0.4 + (Float(number_index) / Float(number_size) * 0.4)).html
84
+ end
59
85
  end
60
86
 
61
87
  # Updates the graph options with items from the passed in hash. Please refer
@@ -142,13 +168,26 @@ class Lilygraph
142
168
 
143
169
  # Rectangles
144
170
  data.each_with_index do |number, number_index|
145
- color = Color::HSL.from_fraction(data_index * (1.0 / @data.size),1.0, 0.4 + (number_index * 0.2)).to_rgb
171
+ color = if @colors.respond_to? :call
172
+ @colors.call(data_index, number_index, @data.size, data.size)
173
+ elsif @colors.class == Array
174
+ first = @colors[data_index % (@colors.size)]
175
+
176
+ if first.class == Array
177
+ first[number_index % (first.size)]
178
+ else
179
+ first
180
+ end
181
+ else
182
+ @colors
183
+ end
184
+
146
185
  height = ((dy / 10.0) * number).round
147
186
 
148
187
  bar_x = (x + ((dx - width) / 2.0) + (number_index * bar_width)).round
149
188
  bar_y = @options[:viewbox][:height] - @options[:margin][:bottom] - height
150
189
 
151
- xml.rect :fill => color.html, :stroke => color.html, 'stroke-width' => 0, :x => bar_x, :width => bar_width, :y => bar_y, :height => height - 1
190
+ xml.rect :fill => color, :stroke => color, 'stroke-width' => 0, :x => bar_x, :width => bar_width, :y => bar_y, :height => height - 1
152
191
  end
153
192
 
154
193
  # Text
data/lilygraph.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{lilygraph}
8
- s.version = "0.2.5"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Christopher Giroir"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lilygraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Giroir