rails-data-explorer 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 (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
+ }