rails-data-explorer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/.gitignore +10 -0
  2. data/CHANGELOG.md +3 -0
  3. data/Gemfile +7 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +52 -0
  6. data/Rakefile +18 -0
  7. data/lib/rails-data-explorer.rb +44 -0
  8. data/lib/rails-data-explorer/action_view_extension.rb +12 -0
  9. data/lib/rails-data-explorer/active_record_extension.rb +14 -0
  10. data/lib/rails-data-explorer/chart.rb +52 -0
  11. data/lib/rails-data-explorer/chart/box_plot.rb +79 -0
  12. data/lib/rails-data-explorer/chart/box_plot_group.rb +109 -0
  13. data/lib/rails-data-explorer/chart/contingency_table.rb +189 -0
  14. data/lib/rails-data-explorer/chart/descriptive_statistics_table.rb +22 -0
  15. data/lib/rails-data-explorer/chart/descriptive_statistics_table_group.rb +0 -0
  16. data/lib/rails-data-explorer/chart/histogram_categorical.rb +73 -0
  17. data/lib/rails-data-explorer/chart/histogram_quantitative.rb +73 -0
  18. data/lib/rails-data-explorer/chart/histogram_temporal.rb +78 -0
  19. data/lib/rails-data-explorer/chart/multi_dimensional_charts.rb +1 -0
  20. data/lib/rails-data-explorer/chart/parallel_coordinates.rb +89 -0
  21. data/lib/rails-data-explorer/chart/parallel_set.rb +65 -0
  22. data/lib/rails-data-explorer/chart/pie_chart.rb +67 -0
  23. data/lib/rails-data-explorer/chart/scatterplot.rb +120 -0
  24. data/lib/rails-data-explorer/chart/scatterplot_matrix.rb +1 -0
  25. data/lib/rails-data-explorer/chart/stacked_bar_chart_categorical_percent.rb +120 -0
  26. data/lib/rails-data-explorer/data_series.rb +115 -0
  27. data/lib/rails-data-explorer/data_set.rb +127 -0
  28. data/lib/rails-data-explorer/data_type.rb +34 -0
  29. data/lib/rails-data-explorer/data_type/categorical.rb +117 -0
  30. data/lib/rails-data-explorer/data_type/geo.rb +1 -0
  31. data/lib/rails-data-explorer/data_type/quantitative.rb +109 -0
  32. data/lib/rails-data-explorer/data_type/quantitative/decimal.rb +13 -0
  33. data/lib/rails-data-explorer/data_type/quantitative/integer.rb +13 -0
  34. data/lib/rails-data-explorer/data_type/quantitative/temporal.rb +62 -0
  35. data/lib/rails-data-explorer/engine.rb +24 -0
  36. data/lib/rails-data-explorer/exploration.rb +89 -0
  37. data/lib/rails-data-explorer/statistics/pearsons_chi_squared_independence_test.rb +75 -0
  38. data/lib/rails-data-explorer/statistics/rng_category.rb +37 -0
  39. data/lib/rails-data-explorer/statistics/rng_gaussian.rb +24 -0
  40. data/lib/rails-data-explorer/statistics/rng_power_law.rb +21 -0
  41. data/lib/rails-data-explorer/utils/color_scale.rb +33 -0
  42. data/lib/rails-data-explorer/utils/data_binner.rb +8 -0
  43. data/lib/rails-data-explorer/utils/data_encoder.rb +2 -0
  44. data/lib/rails-data-explorer/utils/data_quantizer.rb +2 -0
  45. data/lib/rails-data-explorer/utils/value_formatter.rb +41 -0
  46. data/rails-data-explorer.gemspec +30 -0
  47. data/vendor/assets/javascripts/d3.boxplot.js +302 -0
  48. data/vendor/assets/javascripts/d3.parcoords.js +585 -0
  49. data/vendor/assets/javascripts/d3.parsets.js +663 -0
  50. data/vendor/assets/javascripts/d3.v3.js +9294 -0
  51. data/vendor/assets/javascripts/nv.d3.js +14369 -0
  52. data/vendor/assets/javascripts/rails-data-explorer.js +19 -0
  53. data/vendor/assets/stylesheets/bootstrap-theme.css +346 -0
  54. data/vendor/assets/stylesheets/bootstrap.css +1727 -0
  55. data/vendor/assets/stylesheets/d3.boxplot.css +20 -0
  56. data/vendor/assets/stylesheets/d3.parcoords.css +34 -0
  57. data/vendor/assets/stylesheets/d3.parsets.css +34 -0
  58. data/vendor/assets/stylesheets/nv.d3.css +769 -0
  59. data/vendor/assets/stylesheets/rails-data-explorer.css +21 -0
  60. data/vendor/assets/stylesheets/rde-default-style.css +42 -0
  61. metadata +250 -0
@@ -0,0 +1,20 @@
1
+ svg.box {
2
+ font: 10px sans-serif;
3
+ }
4
+
5
+ svg.box line,
6
+ svg.box rect,
7
+ svg.box circle {
8
+ fill: #fff;
9
+ stroke: #000;
10
+ stroke-width: 1.5px;
11
+ }
12
+
13
+ svg.box .center {
14
+ stroke-dasharray: 3,3;
15
+ }
16
+
17
+ svg.box .outlier {
18
+ fill: none;
19
+ stroke: #ccc;
20
+ }
@@ -0,0 +1,34 @@
1
+ .parcoords > svg, .parcoords > canvas {
2
+ font: 14px sans-serif;
3
+ position: absolute;
4
+ }
5
+ .parcoords > canvas {
6
+ pointer-events: none;
7
+ }
8
+ .parcoords rect.background {
9
+ fill: transparent;
10
+ }
11
+ .parcoords rect.background:hover {
12
+ fill: rgba(120,120,120,0.2);
13
+ }
14
+ .parcoords .resize rect {
15
+ fill: rgba(0,0,0,0.1);
16
+ }
17
+ .parcoords rect.extent {
18
+ fill: rgba(255,255,255,0.25);
19
+ stroke: rgba(0,0,0,0.6);
20
+ }
21
+ .parcoords .axis line, .parcoords .axis path {
22
+ fill: none;
23
+ stroke: #222;
24
+ shape-rendering: crispEdges;
25
+ }
26
+ .parcoords canvas {
27
+ opacity: 1;
28
+ -moz-transition: opacity 0.3s;
29
+ -webkit-transition: opacity 0.3s;
30
+ -o-transition: opacity 0.3s;
31
+ }
32
+ .parcoords canvas.faded {
33
+ opacity: 0.25;
34
+ }
@@ -0,0 +1,34 @@
1
+ /* TODO: namespace these classes to avoid collisions */
2
+ .dimension { cursor: ns-resize; }
3
+ .category { cursor: ew-resize; }
4
+ .dimension tspan.name { font-size: 1.5em; fill: #333; font-weight: bold; }
5
+ .dimension tspan.sort { fill: #000; cursor: pointer; opacity: 0; }
6
+ .dimension tspan.sort:hover { fill: #333; }
7
+ .dimension:hover tspan.name { fill: #000; }
8
+ .dimension:hover tspan.sort { opacity: 1; }
9
+ .dimension line { stroke: #000; }
10
+ .dimension rect { stroke: none; fill-opacity: 0; }
11
+ .dimension > rect, .category-background { fill: #fff; }
12
+ .dimension > rect { display: none; }
13
+ .category:hover rect { fill-opacity: .3; }
14
+ .dimension:hover > rect { fill-opacity: .3; }
15
+ .ribbon path { stroke-opacity: 0; fill-opacity: .5; }
16
+ .ribbon path.active { fill-opacity: .9; }
17
+ .ribbon-mouse path { fill-opacity: 0; }
18
+
19
+ .category-0 { fill: #1f77b4; stroke: #1f77b4; }
20
+ .category-1 { fill: #ff7f0e; stroke: #ff7f0e; }
21
+ .category-2 { fill: #2ca02c; stroke: #2ca02c; }
22
+ .category-3 { fill: #d62728; stroke: #d62728; }
23
+ .category-4 { fill: #9467bd; stroke: #9467bd; }
24
+ .category-5 { fill: #8c564b; stroke: #8c564b; }
25
+ .category-6 { fill: #e377c2; stroke: #e377c2; }
26
+ .category-7 { fill: #7f7f7f; stroke: #7f7f7f; }
27
+ .category-8 { fill: #bcbd22; stroke: #bcbd22; }
28
+ .category-9 { fill: #17becf; stroke: #17becf; }
29
+
30
+ .tooltip {
31
+ background-color: rgba(242, 242, 242, .6);
32
+ position: absolute;
33
+ padding: 5px;
34
+ }
@@ -0,0 +1,769 @@
1
+
2
+ /********************
3
+ * HTML CSS
4
+ */
5
+
6
+
7
+ .chartWrap {
8
+ margin: 0;
9
+ padding: 0;
10
+ overflow: hidden;
11
+ }
12
+
13
+ /********************
14
+ Box shadow and border radius styling
15
+ */
16
+ .nvtooltip.with-3d-shadow, .with-3d-shadow .nvtooltip {
17
+ -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
18
+ -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
19
+ box-shadow: 0 5px 10px rgba(0,0,0,.2);
20
+
21
+ -webkit-border-radius: 6px;
22
+ -moz-border-radius: 6px;
23
+ border-radius: 6px;
24
+ }
25
+
26
+ /********************
27
+ * TOOLTIP CSS
28
+ */
29
+
30
+ .nvtooltip {
31
+ position: absolute;
32
+ background-color: rgba(255,255,255,1.0);
33
+ padding: 1px;
34
+ border: 1px solid rgba(0,0,0,.2);
35
+ z-index: 10000;
36
+
37
+ font-family: Arial;
38
+ font-size: 13px;
39
+ text-align: left;
40
+ pointer-events: none;
41
+
42
+ white-space: nowrap;
43
+
44
+ -webkit-touch-callout: none;
45
+ -webkit-user-select: none;
46
+ -khtml-user-select: none;
47
+ -moz-user-select: none;
48
+ -ms-user-select: none;
49
+ user-select: none;
50
+ }
51
+
52
+ /*Give tooltips that old fade in transition by
53
+ putting a "with-transitions" class on the container div.
54
+ */
55
+ .nvtooltip.with-transitions, .with-transitions .nvtooltip {
56
+ transition: opacity 250ms linear;
57
+ -moz-transition: opacity 250ms linear;
58
+ -webkit-transition: opacity 250ms linear;
59
+
60
+ transition-delay: 250ms;
61
+ -moz-transition-delay: 250ms;
62
+ -webkit-transition-delay: 250ms;
63
+ }
64
+
65
+ .nvtooltip.x-nvtooltip,
66
+ .nvtooltip.y-nvtooltip {
67
+ padding: 8px;
68
+ }
69
+
70
+ .nvtooltip h3 {
71
+ margin: 0;
72
+ padding: 4px 14px;
73
+ line-height: 18px;
74
+ font-weight: normal;
75
+ background-color: rgba(247,247,247,0.75);
76
+ text-align: center;
77
+
78
+ border-bottom: 1px solid #ebebeb;
79
+
80
+ -webkit-border-radius: 5px 5px 0 0;
81
+ -moz-border-radius: 5px 5px 0 0;
82
+ border-radius: 5px 5px 0 0;
83
+ }
84
+
85
+ .nvtooltip p {
86
+ margin: 0;
87
+ padding: 5px 14px;
88
+ text-align: center;
89
+ }
90
+
91
+ .nvtooltip span {
92
+ display: inline-block;
93
+ margin: 2px 0;
94
+ }
95
+
96
+ .nvtooltip table {
97
+ margin: 6px;
98
+ border-spacing:0;
99
+ }
100
+
101
+
102
+ .nvtooltip table td {
103
+ padding: 2px 9px 2px 0;
104
+ vertical-align: middle;
105
+ }
106
+
107
+ .nvtooltip table td.key {
108
+ font-weight:normal;
109
+ }
110
+ .nvtooltip table td.value {
111
+ text-align: right;
112
+ font-weight: bold;
113
+ }
114
+
115
+ .nvtooltip table tr.highlight td {
116
+ padding: 1px 9px 1px 0;
117
+ border-bottom-style: solid;
118
+ border-bottom-width: 1px;
119
+ border-top-style: solid;
120
+ border-top-width: 1px;
121
+ }
122
+
123
+ .nvtooltip table td.legend-color-guide div {
124
+ width: 8px;
125
+ height: 8px;
126
+ vertical-align: middle;
127
+ }
128
+
129
+ .nvtooltip .footer {
130
+ padding: 3px;
131
+ text-align: center;
132
+ }
133
+
134
+
135
+ .nvtooltip-pending-removal {
136
+ position: absolute;
137
+ pointer-events: none;
138
+ }
139
+
140
+
141
+ /********************
142
+ * SVG CSS
143
+ */
144
+
145
+
146
+ svg {
147
+ -webkit-touch-callout: none;
148
+ -webkit-user-select: none;
149
+ -khtml-user-select: none;
150
+ -moz-user-select: none;
151
+ -ms-user-select: none;
152
+ user-select: none;
153
+ /* Trying to get SVG to act like a greedy block in all browsers */
154
+ display: block;
155
+ width:100%;
156
+ height:100%;
157
+ }
158
+
159
+
160
+ svg text {
161
+ font: normal 12px Arial;
162
+ }
163
+
164
+ svg .title {
165
+ font: bold 14px Arial;
166
+ }
167
+
168
+ .nvd3 .nv-background {
169
+ fill: white;
170
+ fill-opacity: 0;
171
+ /*
172
+ pointer-events: none;
173
+ */
174
+ }
175
+
176
+ .nvd3.nv-noData {
177
+ font-size: 18px;
178
+ font-weight: bold;
179
+ }
180
+
181
+
182
+ /**********
183
+ * Brush
184
+ */
185
+
186
+ .nv-brush .extent {
187
+ fill-opacity: .125;
188
+ shape-rendering: crispEdges;
189
+ }
190
+
191
+
192
+
193
+ /**********
194
+ * Legend
195
+ */
196
+
197
+ .nvd3 .nv-legend .nv-series {
198
+ cursor: pointer;
199
+ }
200
+
201
+ .nvd3 .nv-legend .disabled circle {
202
+ fill-opacity: 0;
203
+ }
204
+
205
+
206
+
207
+ /**********
208
+ * Axes
209
+ */
210
+ .nvd3 .nv-axis {
211
+ pointer-events:none;
212
+ }
213
+
214
+ .nvd3 .nv-axis path {
215
+ fill: none;
216
+ stroke: #000;
217
+ stroke-opacity: .75;
218
+ shape-rendering: crispEdges;
219
+ }
220
+
221
+ .nvd3 .nv-axis path.domain {
222
+ stroke-opacity: .75;
223
+ }
224
+
225
+ .nvd3 .nv-axis.nv-x path.domain {
226
+ stroke-opacity: 0;
227
+ }
228
+
229
+ .nvd3 .nv-axis line {
230
+ fill: none;
231
+ stroke: #e5e5e5;
232
+ shape-rendering: crispEdges;
233
+ }
234
+
235
+ .nvd3 .nv-axis .zero line,
236
+ /*this selector may not be necessary*/ .nvd3 .nv-axis line.zero {
237
+ stroke-opacity: .75;
238
+ }
239
+
240
+ .nvd3 .nv-axis .nv-axisMaxMin text {
241
+ font-weight: bold;
242
+ }
243
+
244
+ .nvd3 .x .nv-axis .nv-axisMaxMin text,
245
+ .nvd3 .x2 .nv-axis .nv-axisMaxMin text,
246
+ .nvd3 .x3 .nv-axis .nv-axisMaxMin text {
247
+ text-anchor: middle
248
+ }
249
+
250
+
251
+
252
+ /**********
253
+ * Brush
254
+ */
255
+
256
+ .nv-brush .resize path {
257
+ fill: #eee;
258
+ stroke: #666;
259
+ }
260
+
261
+
262
+
263
+ /**********
264
+ * Bars
265
+ */
266
+
267
+ .nvd3 .nv-bars .negative rect {
268
+ zfill: brown;
269
+ }
270
+
271
+ .nvd3 .nv-bars rect {
272
+ zfill: steelblue;
273
+ fill-opacity: .75;
274
+
275
+ transition: fill-opacity 250ms linear;
276
+ -moz-transition: fill-opacity 250ms linear;
277
+ -webkit-transition: fill-opacity 250ms linear;
278
+ }
279
+
280
+ .nvd3 .nv-bars rect.hover {
281
+ fill-opacity: 1;
282
+ }
283
+
284
+ .nvd3 .nv-bars .hover rect {
285
+ fill: lightblue;
286
+ }
287
+
288
+ .nvd3 .nv-bars text {
289
+ fill: rgba(0,0,0,0);
290
+ }
291
+
292
+ .nvd3 .nv-bars .hover text {
293
+ fill: rgba(0,0,0,1);
294
+ }
295
+
296
+
297
+ /**********
298
+ * Bars
299
+ */
300
+
301
+ .nvd3 .nv-multibar .nv-groups rect,
302
+ .nvd3 .nv-multibarHorizontal .nv-groups rect,
303
+ .nvd3 .nv-discretebar .nv-groups rect {
304
+ stroke-opacity: 0;
305
+
306
+ transition: fill-opacity 250ms linear;
307
+ -moz-transition: fill-opacity 250ms linear;
308
+ -webkit-transition: fill-opacity 250ms linear;
309
+ }
310
+
311
+ .nvd3 .nv-multibar .nv-groups rect:hover,
312
+ .nvd3 .nv-multibarHorizontal .nv-groups rect:hover,
313
+ .nvd3 .nv-discretebar .nv-groups rect:hover {
314
+ fill-opacity: 1;
315
+ }
316
+
317
+ .nvd3 .nv-discretebar .nv-groups text,
318
+ .nvd3 .nv-multibarHorizontal .nv-groups text {
319
+ font-weight: bold;
320
+ fill: rgba(0,0,0,1);
321
+ stroke: rgba(0,0,0,0);
322
+ }
323
+
324
+ /***********
325
+ * Pie Chart
326
+ */
327
+
328
+ .nvd3.nv-pie path {
329
+ stroke-opacity: 0;
330
+ transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
331
+ -moz-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
332
+ -webkit-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
333
+
334
+ }
335
+
336
+ .nvd3.nv-pie .nv-slice text {
337
+ stroke: #000;
338
+ stroke-width: 0;
339
+ }
340
+
341
+ .nvd3.nv-pie path {
342
+ stroke: #fff;
343
+ stroke-width: 1px;
344
+ stroke-opacity: 1;
345
+ }
346
+
347
+ .nvd3.nv-pie .hover path {
348
+ fill-opacity: .7;
349
+ }
350
+ .nvd3.nv-pie .nv-label {
351
+ pointer-events: none;
352
+ }
353
+ .nvd3.nv-pie .nv-label rect {
354
+ fill-opacity: 0;
355
+ stroke-opacity: 0;
356
+ }
357
+
358
+ /**********
359
+ * Lines
360
+ */
361
+
362
+ .nvd3 .nv-groups path.nv-line {
363
+ fill: none;
364
+ stroke-width: 1.5px;
365
+ /*
366
+ stroke-linecap: round;
367
+ shape-rendering: geometricPrecision;
368
+
369
+ transition: stroke-width 250ms linear;
370
+ -moz-transition: stroke-width 250ms linear;
371
+ -webkit-transition: stroke-width 250ms linear;
372
+
373
+ transition-delay: 250ms
374
+ -moz-transition-delay: 250ms;
375
+ -webkit-transition-delay: 250ms;
376
+ */
377
+ }
378
+
379
+ .nvd3 .nv-groups path.nv-line.nv-thin-line {
380
+ stroke-width: 1px;
381
+ }
382
+
383
+
384
+ .nvd3 .nv-groups path.nv-area {
385
+ stroke: none;
386
+ /*
387
+ stroke-linecap: round;
388
+ shape-rendering: geometricPrecision;
389
+
390
+ stroke-width: 2.5px;
391
+ transition: stroke-width 250ms linear;
392
+ -moz-transition: stroke-width 250ms linear;
393
+ -webkit-transition: stroke-width 250ms linear;
394
+
395
+ transition-delay: 250ms
396
+ -moz-transition-delay: 250ms;
397
+ -webkit-transition-delay: 250ms;
398
+ */
399
+ }
400
+
401
+ .nvd3 .nv-line.hover path {
402
+ stroke-width: 6px;
403
+ }
404
+
405
+ /*
406
+ .nvd3.scatter .groups .point {
407
+ fill-opacity: 0.1;
408
+ stroke-opacity: 0.1;
409
+ }
410
+ */
411
+
412
+ .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point {
413
+ fill-opacity: 0;
414
+ stroke-opacity: 0;
415
+ }
416
+
417
+ .nvd3.nv-scatter.nv-single-point .nv-groups .nv-point {
418
+ fill-opacity: .5 !important;
419
+ stroke-opacity: .5 !important;
420
+ }
421
+
422
+
423
+ .with-transitions .nvd3 .nv-groups .nv-point {
424
+ transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
425
+ -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
426
+ -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
427
+
428
+ }
429
+
430
+ .nvd3.nv-scatter .nv-groups .nv-point.hover,
431
+ .nvd3 .nv-groups .nv-point.hover {
432
+ stroke-width: 7px;
433
+ fill-opacity: .95 !important;
434
+ stroke-opacity: .95 !important;
435
+ }
436
+
437
+
438
+ .nvd3 .nv-point-paths path {
439
+ stroke: #aaa;
440
+ stroke-opacity: 0;
441
+ fill: #eee;
442
+ fill-opacity: 0;
443
+ }
444
+
445
+
446
+
447
+ .nvd3 .nv-indexLine {
448
+ cursor: ew-resize;
449
+ }
450
+
451
+
452
+ /**********
453
+ * Distribution
454
+ */
455
+
456
+ .nvd3 .nv-distribution {
457
+ pointer-events: none;
458
+ }
459
+
460
+
461
+
462
+ /**********
463
+ * Scatter
464
+ */
465
+
466
+ /* **Attempting to remove this for useVoronoi(false), need to see if it's required anywhere
467
+ .nvd3 .nv-groups .nv-point {
468
+ pointer-events: none;
469
+ }
470
+ */
471
+
472
+ .nvd3 .nv-groups .nv-point.hover {
473
+ stroke-width: 20px;
474
+ stroke-opacity: .5;
475
+ }
476
+
477
+ .nvd3 .nv-scatter .nv-point.hover {
478
+ fill-opacity: 1;
479
+ }
480
+
481
+ /*
482
+ .nv-group.hover .nv-point {
483
+ fill-opacity: 1;
484
+ }
485
+ */
486
+
487
+
488
+ /**********
489
+ * Stacked Area
490
+ */
491
+
492
+ .nvd3.nv-stackedarea path.nv-area {
493
+ fill-opacity: .7;
494
+ /*
495
+ stroke-opacity: .65;
496
+ fill-opacity: 1;
497
+ */
498
+ stroke-opacity: 0;
499
+
500
+ transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
501
+ -moz-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
502
+ -webkit-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
503
+
504
+ /*
505
+ transition-delay: 500ms;
506
+ -moz-transition-delay: 500ms;
507
+ -webkit-transition-delay: 500ms;
508
+ */
509
+
510
+ }
511
+
512
+ .nvd3.nv-stackedarea path.nv-area.hover {
513
+ fill-opacity: .9;
514
+ /*
515
+ stroke-opacity: .85;
516
+ */
517
+ }
518
+ /*
519
+ .d3stackedarea .groups path {
520
+ stroke-opacity: 0;
521
+ }
522
+ */
523
+
524
+
525
+
526
+ .nvd3.nv-stackedarea .nv-groups .nv-point {
527
+ stroke-opacity: 0;
528
+ fill-opacity: 0;
529
+ }
530
+
531
+ /*
532
+ .nvd3.nv-stackedarea .nv-groups .nv-point.hover {
533
+ stroke-width: 20px;
534
+ stroke-opacity: .75;
535
+ fill-opacity: 1;
536
+ }*/
537
+
538
+
539
+
540
+ /**********
541
+ * Line Plus Bar
542
+ */
543
+
544
+ .nvd3.nv-linePlusBar .nv-bar rect {
545
+ fill-opacity: .75;
546
+ }
547
+
548
+ .nvd3.nv-linePlusBar .nv-bar rect:hover {
549
+ fill-opacity: 1;
550
+ }
551
+
552
+
553
+ /**********
554
+ * Bullet
555
+ */
556
+
557
+ .nvd3.nv-bullet { font: 10px sans-serif; }
558
+ .nvd3.nv-bullet .nv-measure { fill-opacity: .8; }
559
+ .nvd3.nv-bullet .nv-measure:hover { fill-opacity: 1; }
560
+ .nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; }
561
+ .nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; }
562
+ .nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; }
563
+ .nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; }
564
+ .nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; }
565
+ .nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; }
566
+ .nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; }
567
+ .nvd3.nv-bullet .nv-subtitle { fill: #999; }
568
+
569
+
570
+ .nvd3.nv-bullet .nv-range {
571
+ fill: #bababa;
572
+ fill-opacity: .4;
573
+ }
574
+ .nvd3.nv-bullet .nv-range:hover {
575
+ fill-opacity: .7;
576
+ }
577
+
578
+
579
+
580
+ /**********
581
+ * Sparkline
582
+ */
583
+
584
+ .nvd3.nv-sparkline path {
585
+ fill: none;
586
+ }
587
+
588
+ .nvd3.nv-sparklineplus g.nv-hoverValue {
589
+ pointer-events: none;
590
+ }
591
+
592
+ .nvd3.nv-sparklineplus .nv-hoverValue line {
593
+ stroke: #333;
594
+ stroke-width: 1.5px;
595
+ }
596
+
597
+ .nvd3.nv-sparklineplus,
598
+ .nvd3.nv-sparklineplus g {
599
+ pointer-events: all;
600
+ }
601
+
602
+ .nvd3 .nv-hoverArea {
603
+ fill-opacity: 0;
604
+ stroke-opacity: 0;
605
+ }
606
+
607
+ .nvd3.nv-sparklineplus .nv-xValue,
608
+ .nvd3.nv-sparklineplus .nv-yValue {
609
+ /*
610
+ stroke: #666;
611
+ */
612
+ stroke-width: 0;
613
+ font-size: .9em;
614
+ font-weight: normal;
615
+ }
616
+
617
+ .nvd3.nv-sparklineplus .nv-yValue {
618
+ stroke: #f66;
619
+ }
620
+
621
+ .nvd3.nv-sparklineplus .nv-maxValue {
622
+ stroke: #2ca02c;
623
+ fill: #2ca02c;
624
+ }
625
+
626
+ .nvd3.nv-sparklineplus .nv-minValue {
627
+ stroke: #d62728;
628
+ fill: #d62728;
629
+ }
630
+
631
+ .nvd3.nv-sparklineplus .nv-currentValue {
632
+ /*
633
+ stroke: #444;
634
+ fill: #000;
635
+ */
636
+ font-weight: bold;
637
+ font-size: 1.1em;
638
+ }
639
+
640
+ /**********
641
+ * historical stock
642
+ */
643
+
644
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick {
645
+ stroke-width: 2px;
646
+ }
647
+
648
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover {
649
+ stroke-width: 4px;
650
+ }
651
+
652
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive {
653
+ stroke: #2ca02c;
654
+ }
655
+
656
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative {
657
+ stroke: #d62728;
658
+ }
659
+
660
+ .nvd3.nv-historicalStockChart .nv-axis .nv-axislabel {
661
+ font-weight: bold;
662
+ }
663
+
664
+ .nvd3.nv-historicalStockChart .nv-dragTarget {
665
+ fill-opacity: 0;
666
+ stroke: none;
667
+ cursor: move;
668
+ }
669
+
670
+ .nvd3 .nv-brush .extent {
671
+ /*
672
+ cursor: ew-resize !important;
673
+ */
674
+ fill-opacity: 0 !important;
675
+ }
676
+
677
+ .nvd3 .nv-brushBackground rect {
678
+ stroke: #000;
679
+ stroke-width: .4;
680
+ fill: #fff;
681
+ fill-opacity: .7;
682
+ }
683
+
684
+
685
+
686
+ /**********
687
+ * Indented Tree
688
+ */
689
+
690
+
691
+ /**
692
+ * TODO: the following 3 selectors are based on classes used in the example. I should either make them standard and leave them here, or move to a CSS file not included in the library
693
+ */
694
+ .nvd3.nv-indentedtree .name {
695
+ margin-left: 5px;
696
+ }
697
+
698
+ .nvd3.nv-indentedtree .clickable {
699
+ color: #08C;
700
+ cursor: pointer;
701
+ }
702
+
703
+ .nvd3.nv-indentedtree span.clickable:hover {
704
+ color: #005580;
705
+ text-decoration: underline;
706
+ }
707
+
708
+
709
+ .nvd3.nv-indentedtree .nv-childrenCount {
710
+ display: inline-block;
711
+ margin-left: 5px;
712
+ }
713
+
714
+ .nvd3.nv-indentedtree .nv-treeicon {
715
+ cursor: pointer;
716
+ /*
717
+ cursor: n-resize;
718
+ */
719
+ }
720
+
721
+ .nvd3.nv-indentedtree .nv-treeicon.nv-folded {
722
+ cursor: pointer;
723
+ /*
724
+ cursor: s-resize;
725
+ */
726
+ }
727
+
728
+ /**********
729
+ * Parallel Coordinates
730
+ */
731
+
732
+ .nvd3 .background path {
733
+ fill: none;
734
+ stroke: #ccc;
735
+ stroke-opacity: .4;
736
+ shape-rendering: crispEdges;
737
+ }
738
+
739
+ .nvd3 .foreground path {
740
+ fill: none;
741
+ stroke: steelblue;
742
+ stroke-opacity: .7;
743
+ }
744
+
745
+ .nvd3 .brush .extent {
746
+ fill-opacity: .3;
747
+ stroke: #fff;
748
+ shape-rendering: crispEdges;
749
+ }
750
+
751
+ .nvd3 .axis line, .axis path {
752
+ fill: none;
753
+ stroke: #000;
754
+ shape-rendering: crispEdges;
755
+ }
756
+
757
+ .nvd3 .axis text {
758
+ text-shadow: 0 1px 0 #fff;
759
+ }
760
+
761
+ /****
762
+ Interactive Layer
763
+ */
764
+ .nvd3 .nv-interactiveGuideLine {
765
+ pointer-events:none;
766
+ }
767
+ .nvd3 line.nv-guideline {
768
+ stroke: #ccc;
769
+ }