chartx 0.0.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.
Files changed (84) hide show
  1. data/.gitignore +17 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +145 -0
  6. data/Rakefile +1 -0
  7. data/chartx.gemspec +40 -0
  8. data/lib/chartx/engine.rb +11 -0
  9. data/lib/chartx/helper.rb +184 -0
  10. data/lib/chartx/version.rb +3 -0
  11. data/lib/chartx.rb +3 -0
  12. data/screenshots/barchart.png +0 -0
  13. data/screenshots/bulletchart.png +0 -0
  14. data/screenshots/horizontalbarchart.png +0 -0
  15. data/screenshots/linechart.png +0 -0
  16. data/screenshots/linewithfocuschart.png +0 -0
  17. data/screenshots/multibarchart2.png +0 -0
  18. data/screenshots/piechart.png +0 -0
  19. data/screenshots/scatterchart.png +0 -0
  20. data/screenshots/stackedareachart.png +0 -0
  21. data/screenshots/stackedareachart3.png +0 -0
  22. data/vendor/assets/javascripts/chartx-core.js +9 -0
  23. data/vendor/assets/javascripts/chartx-models.js +2 -0
  24. data/vendor/assets/javascripts/nvd3/.gitignore +27 -0
  25. data/vendor/assets/javascripts/nvd3/.jshintrc +3 -0
  26. data/vendor/assets/javascripts/nvd3/LICENSE.md +49 -0
  27. data/vendor/assets/javascripts/nvd3/README.md +1 -0
  28. data/vendor/assets/javascripts/nvd3/lib/cie.js +155 -0
  29. data/vendor/assets/javascripts/nvd3/lib/crossfilter.js +1180 -0
  30. data/vendor/assets/javascripts/nvd3/lib/crossfilter.min.js +1 -0
  31. data/vendor/assets/javascripts/nvd3/lib/d3.js +8798 -0
  32. data/vendor/assets/javascripts/nvd3/lib/d3.min.js +5 -0
  33. data/vendor/assets/javascripts/nvd3/lib/fisheye.js +86 -0
  34. data/vendor/assets/javascripts/nvd3/lib/hive.js +80 -0
  35. data/vendor/assets/javascripts/nvd3/lib/horizon.js +192 -0
  36. data/vendor/assets/javascripts/nvd3/lib/sankey.js +292 -0
  37. data/vendor/assets/javascripts/nvd3/nv.d3.js +13048 -0
  38. data/vendor/assets/javascripts/nvd3/nv.d3.min.js +6 -0
  39. data/vendor/assets/javascripts/nvd3/src/core.js +118 -0
  40. data/vendor/assets/javascripts/nvd3/src/intro.js +1 -0
  41. data/vendor/assets/javascripts/nvd3/src/models/axis.js +398 -0
  42. data/vendor/assets/javascripts/nvd3/src/models/boilerplate.js +102 -0
  43. data/vendor/assets/javascripts/nvd3/src/models/bullet.js +377 -0
  44. data/vendor/assets/javascripts/nvd3/src/models/bulletChart.js +341 -0
  45. data/vendor/assets/javascripts/nvd3/src/models/cumulativeLineChart.js +685 -0
  46. data/vendor/assets/javascripts/nvd3/src/models/discreteBar.js +327 -0
  47. data/vendor/assets/javascripts/nvd3/src/models/discreteBarChart.js +290 -0
  48. data/vendor/assets/javascripts/nvd3/src/models/distribution.js +146 -0
  49. data/vendor/assets/javascripts/nvd3/src/models/historicalBar.js +289 -0
  50. data/vendor/assets/javascripts/nvd3/src/models/historicalBarChart.js +421 -0
  51. data/vendor/assets/javascripts/nvd3/src/models/indentedTree.js +317 -0
  52. data/vendor/assets/javascripts/nvd3/src/models/legend.js +207 -0
  53. data/vendor/assets/javascripts/nvd3/src/models/line.js +284 -0
  54. data/vendor/assets/javascripts/nvd3/src/models/lineChart.js +421 -0
  55. data/vendor/assets/javascripts/nvd3/src/models/linePlusBarChart.js +455 -0
  56. data/vendor/assets/javascripts/nvd3/src/models/linePlusBarWithFocusChart.js +665 -0
  57. data/vendor/assets/javascripts/nvd3/src/models/lineWithFisheye.js +197 -0
  58. data/vendor/assets/javascripts/nvd3/src/models/lineWithFisheyeChart.js +319 -0
  59. data/vendor/assets/javascripts/nvd3/src/models/lineWithFocusChart.js +560 -0
  60. data/vendor/assets/javascripts/nvd3/src/models/multiBar.js +442 -0
  61. data/vendor/assets/javascripts/nvd3/src/models/multiBarChart.js +506 -0
  62. data/vendor/assets/javascripts/nvd3/src/models/multiBarHorizontal.js +420 -0
  63. data/vendor/assets/javascripts/nvd3/src/models/multiBarHorizontalChart.js +448 -0
  64. data/vendor/assets/javascripts/nvd3/src/models/multiBarTimeSeries.js +371 -0
  65. data/vendor/assets/javascripts/nvd3/src/models/multiBarTimeSeriesChart.js +403 -0
  66. data/vendor/assets/javascripts/nvd3/src/models/multiChart.js +444 -0
  67. data/vendor/assets/javascripts/nvd3/src/models/ohlcBar.js +365 -0
  68. data/vendor/assets/javascripts/nvd3/src/models/parallelCoordinates.js +238 -0
  69. data/vendor/assets/javascripts/nvd3/src/models/pie.js +386 -0
  70. data/vendor/assets/javascripts/nvd3/src/models/pieChart.js +302 -0
  71. data/vendor/assets/javascripts/nvd3/src/models/scatter.js +660 -0
  72. data/vendor/assets/javascripts/nvd3/src/models/scatterChart.js +614 -0
  73. data/vendor/assets/javascripts/nvd3/src/models/scatterPlusLineChart.js +610 -0
  74. data/vendor/assets/javascripts/nvd3/src/models/sparkline.js +179 -0
  75. data/vendor/assets/javascripts/nvd3/src/models/sparklinePlus.js +293 -0
  76. data/vendor/assets/javascripts/nvd3/src/models/stackedArea.js +336 -0
  77. data/vendor/assets/javascripts/nvd3/src/models/stackedAreaChart.js +490 -0
  78. data/vendor/assets/javascripts/nvd3/src/nv.d3.css +704 -0
  79. data/vendor/assets/javascripts/nvd3/src/outro.js +1 -0
  80. data/vendor/assets/javascripts/nvd3/src/tooltip.js +133 -0
  81. data/vendor/assets/javascripts/nvd3/src/utils.js +118 -0
  82. data/vendor/assets/javascripts/set-env.js.erb +1 -0
  83. data/vendor/assets/stylesheets/chartx.css +3 -0
  84. metadata +189 -0
@@ -0,0 +1,336 @@
1
+
2
+ nv.models.stackedArea = function() {
3
+
4
+ //============================================================
5
+ // Public Variables with Default Settings
6
+ //------------------------------------------------------------
7
+
8
+ var margin = {top: 0, right: 0, bottom: 0, left: 0}
9
+ , width = 960
10
+ , height = 500
11
+ , color = nv.utils.defaultColor() // a function that computes the color
12
+ , id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't selet one
13
+ , getX = function(d) { return d.x } // accessor to get the x value from a data point
14
+ , getY = function(d) { return d.y } // accessor to get the y value from a data point
15
+ , style = 'stack'
16
+ , offset = 'zero'
17
+ , order = 'default'
18
+ , interpolate = 'linear' // controls the line interpolation
19
+ , clipEdge = false // if true, masks lines within x and y scale
20
+ , x //can be accessed via chart.xScale()
21
+ , y //can be accessed via chart.yScale()
22
+ , scatter = nv.models.scatter()
23
+ , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'areaClick', 'areaMouseover', 'areaMouseout')
24
+ ;
25
+
26
+ scatter
27
+ .size(2.2) // default size
28
+ .sizeDomain([2.2,2.2]) // all the same size by default
29
+ ;
30
+
31
+ /************************************
32
+ * offset:
33
+ * 'wiggle' (stream)
34
+ * 'zero' (stacked)
35
+ * 'expand' (normalize to 100%)
36
+ * 'silhouette' (simple centered)
37
+ *
38
+ * order:
39
+ * 'inside-out' (stream)
40
+ * 'default' (input order)
41
+ ************************************/
42
+
43
+ //============================================================
44
+
45
+
46
+ function chart(selection) {
47
+ selection.each(function(data) {
48
+ var availableWidth = width - margin.left - margin.right,
49
+ availableHeight = height - margin.top - margin.bottom,
50
+ container = d3.select(this);
51
+
52
+ //------------------------------------------------------------
53
+ // Setup Scales
54
+
55
+ x = scatter.xScale();
56
+ y = scatter.yScale();
57
+
58
+ //------------------------------------------------------------
59
+
60
+
61
+ // Injecting point index into each point because d3.layout.stack().out does not give index
62
+ // ***Also storing getY(d,i) as stackedY so that it can be set to 0 if series is disabled
63
+ data = data.map(function(aseries, i) {
64
+ aseries.values = aseries.values.map(function(d, j) {
65
+ d.index = j;
66
+ d.stackedY = aseries.disabled ? 0 : getY(d,j);
67
+ return d;
68
+ })
69
+ return aseries;
70
+ });
71
+
72
+
73
+ data = d3.layout.stack()
74
+ .order(order)
75
+ .offset(offset)
76
+ .values(function(d) { return d.values }) //TODO: make values customizeable in EVERY model in this fashion
77
+ .x(getX)
78
+ .y(function(d) { return d.stackedY })
79
+ .out(function(d, y0, y) {
80
+ d.display = {
81
+ y: y,
82
+ y0: y0
83
+ };
84
+ })
85
+ (data);
86
+
87
+
88
+ //------------------------------------------------------------
89
+ // Setup containers and skeleton of chart
90
+
91
+ var wrap = container.selectAll('g.nv-wrap.nv-stackedarea').data([data]);
92
+ var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedarea');
93
+ var defsEnter = wrapEnter.append('defs');
94
+ var gEnter = wrapEnter.append('g');
95
+ var g = wrap.select('g');
96
+
97
+ gEnter.append('g').attr('class', 'nv-areaWrap');
98
+ gEnter.append('g').attr('class', 'nv-scatterWrap');
99
+
100
+ wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
101
+
102
+ //------------------------------------------------------------
103
+
104
+
105
+ scatter
106
+ .width(availableWidth)
107
+ .height(availableHeight)
108
+ .x(getX)
109
+ .y(function(d) { return d.display.y + d.display.y0 })
110
+ .forceY([0])
111
+ .color(data.map(function(d,i) {
112
+ return d.color || color(d, i);
113
+ }).filter(function(d,i) { return !data[i].disabled }));
114
+
115
+
116
+ var scatterWrap = g.select('.nv-scatterWrap')
117
+ .datum(data.filter(function(d) { return !d.disabled }))
118
+
119
+ //d3.transition(scatterWrap).call(scatter);
120
+ scatterWrap.call(scatter);
121
+
122
+
123
+
124
+
125
+
126
+ defsEnter.append('clipPath')
127
+ .attr('id', 'nv-edge-clip-' + id)
128
+ .append('rect');
129
+
130
+ wrap.select('#nv-edge-clip-' + id + ' rect')
131
+ .attr('width', availableWidth)
132
+ .attr('height', availableHeight);
133
+
134
+ g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
135
+
136
+
137
+
138
+
139
+ var area = d3.svg.area()
140
+ .x(function(d,i) { return x(getX(d,i)) })
141
+ .y0(function(d) { return y(d.display.y0) })
142
+ .y1(function(d) { return y(d.display.y + d.display.y0) })
143
+ .interpolate(interpolate);
144
+
145
+ var zeroArea = d3.svg.area()
146
+ .x(function(d,i) { return x(getX(d,i)) })
147
+ .y0(function(d) { return y(d.display.y0) })
148
+ .y1(function(d) { return y(d.display.y0) });
149
+
150
+
151
+ var path = g.select('.nv-areaWrap').selectAll('path.nv-area')
152
+ .data(function(d) { return d });
153
+ //.data(function(d) { return d }, function(d) { return d.key });
154
+ path.enter().append('path').attr('class', function(d,i) { return 'nv-area nv-area-' + i })
155
+ .on('mouseover', function(d,i) {
156
+ d3.select(this).classed('hover', true);
157
+ dispatch.areaMouseover({
158
+ point: d,
159
+ series: d.key,
160
+ pos: [d3.event.pageX, d3.event.pageY],
161
+ seriesIndex: i
162
+ });
163
+ })
164
+ .on('mouseout', function(d,i) {
165
+ d3.select(this).classed('hover', false);
166
+ dispatch.areaMouseout({
167
+ point: d,
168
+ series: d.key,
169
+ pos: [d3.event.pageX, d3.event.pageY],
170
+ seriesIndex: i
171
+ });
172
+ })
173
+ .on('click', function(d,i) {
174
+ d3.select(this).classed('hover', false);
175
+ dispatch.areaClick({
176
+ point: d,
177
+ series: d.key,
178
+ pos: [d3.event.pageX, d3.event.pageY],
179
+ seriesIndex: i
180
+ });
181
+ })
182
+ //d3.transition(path.exit())
183
+ path.exit()
184
+ .attr('d', function(d,i) { return zeroArea(d.values,i) })
185
+ .remove();
186
+ path
187
+ .style('fill', function(d,i){ return d.color || color(d, i) })
188
+ .style('stroke', function(d,i){ return d.color || color(d, i) });
189
+ //d3.transition(path)
190
+ path
191
+ .attr('d', function(d,i) { return area(d.values,i) })
192
+
193
+
194
+ //============================================================
195
+ // Event Handling/Dispatching (in chart's scope)
196
+ //------------------------------------------------------------
197
+
198
+ scatter.dispatch.on('elementMouseover.area', function(e) {
199
+ g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', true);
200
+ });
201
+ scatter.dispatch.on('elementMouseout.area', function(e) {
202
+ g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', false);
203
+ });
204
+
205
+ //============================================================
206
+
207
+ });
208
+
209
+
210
+ return chart;
211
+ }
212
+
213
+
214
+ //============================================================
215
+ // Event Handling/Dispatching (out of chart's scope)
216
+ //------------------------------------------------------------
217
+
218
+ scatter.dispatch.on('elementClick.area', function(e) {
219
+ dispatch.areaClick(e);
220
+ })
221
+ scatter.dispatch.on('elementMouseover.tooltip', function(e) {
222
+ e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],
223
+ dispatch.tooltipShow(e);
224
+ });
225
+ scatter.dispatch.on('elementMouseout.tooltip', function(e) {
226
+ dispatch.tooltipHide(e);
227
+ });
228
+
229
+ //============================================================
230
+
231
+
232
+ //============================================================
233
+ // Global getters and setters
234
+ //------------------------------------------------------------
235
+
236
+ chart.dispatch = dispatch;
237
+ chart.scatter = scatter;
238
+
239
+ d3.rebind(chart, scatter, 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'clipRadius');
240
+
241
+ chart.x = function(_) {
242
+ if (!arguments.length) return getX;
243
+ getX = d3.functor(_);
244
+ return chart;
245
+ };
246
+
247
+ chart.y = function(_) {
248
+ if (!arguments.length) return getY;
249
+ getY = d3.functor(_);
250
+ return chart;
251
+ }
252
+
253
+ chart.margin = function(_) {
254
+ if (!arguments.length) return margin;
255
+ margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
256
+ margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
257
+ margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
258
+ margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
259
+ return chart;
260
+ };
261
+
262
+ chart.width = function(_) {
263
+ if (!arguments.length) return width;
264
+ width = _;
265
+ return chart;
266
+ };
267
+
268
+ chart.height = function(_) {
269
+ if (!arguments.length) return height;
270
+ height = _;
271
+ return chart;
272
+ };
273
+
274
+ chart.clipEdge = function(_) {
275
+ if (!arguments.length) return clipEdge;
276
+ clipEdge = _;
277
+ return chart;
278
+ };
279
+
280
+ chart.color = function(_) {
281
+ if (!arguments.length) return color;
282
+ color = nv.utils.getColor(_);
283
+ return chart;
284
+ };
285
+
286
+ chart.offset = function(_) {
287
+ if (!arguments.length) return offset;
288
+ offset = _;
289
+ return chart;
290
+ };
291
+
292
+ chart.order = function(_) {
293
+ if (!arguments.length) return order;
294
+ order = _;
295
+ return chart;
296
+ };
297
+
298
+ //shortcut for offset + order
299
+ chart.style = function(_) {
300
+ if (!arguments.length) return style;
301
+ style = _;
302
+
303
+ switch (style) {
304
+ case 'stack':
305
+ chart.offset('zero');
306
+ chart.order('default');
307
+ break;
308
+ case 'stream':
309
+ chart.offset('wiggle');
310
+ chart.order('inside-out');
311
+ break;
312
+ case 'stream-center':
313
+ chart.offset('silhouette');
314
+ chart.order('inside-out');
315
+ break;
316
+ case 'expand':
317
+ chart.offset('expand');
318
+ chart.order('default');
319
+ break;
320
+ }
321
+
322
+ return chart;
323
+ };
324
+
325
+ chart.interpolate = function(_) {
326
+ if (!arguments.length) return interpolate;
327
+ interpolate = _;
328
+ return interpolate;
329
+
330
+ };
331
+
332
+ //============================================================
333
+
334
+
335
+ return chart;
336
+ }