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.
- data/.gitignore +10 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +52 -0
- data/Rakefile +18 -0
- data/lib/rails-data-explorer.rb +44 -0
- data/lib/rails-data-explorer/action_view_extension.rb +12 -0
- data/lib/rails-data-explorer/active_record_extension.rb +14 -0
- data/lib/rails-data-explorer/chart.rb +52 -0
- data/lib/rails-data-explorer/chart/box_plot.rb +79 -0
- data/lib/rails-data-explorer/chart/box_plot_group.rb +109 -0
- data/lib/rails-data-explorer/chart/contingency_table.rb +189 -0
- data/lib/rails-data-explorer/chart/descriptive_statistics_table.rb +22 -0
- data/lib/rails-data-explorer/chart/descriptive_statistics_table_group.rb +0 -0
- data/lib/rails-data-explorer/chart/histogram_categorical.rb +73 -0
- data/lib/rails-data-explorer/chart/histogram_quantitative.rb +73 -0
- data/lib/rails-data-explorer/chart/histogram_temporal.rb +78 -0
- data/lib/rails-data-explorer/chart/multi_dimensional_charts.rb +1 -0
- data/lib/rails-data-explorer/chart/parallel_coordinates.rb +89 -0
- data/lib/rails-data-explorer/chart/parallel_set.rb +65 -0
- data/lib/rails-data-explorer/chart/pie_chart.rb +67 -0
- data/lib/rails-data-explorer/chart/scatterplot.rb +120 -0
- data/lib/rails-data-explorer/chart/scatterplot_matrix.rb +1 -0
- data/lib/rails-data-explorer/chart/stacked_bar_chart_categorical_percent.rb +120 -0
- data/lib/rails-data-explorer/data_series.rb +115 -0
- data/lib/rails-data-explorer/data_set.rb +127 -0
- data/lib/rails-data-explorer/data_type.rb +34 -0
- data/lib/rails-data-explorer/data_type/categorical.rb +117 -0
- data/lib/rails-data-explorer/data_type/geo.rb +1 -0
- data/lib/rails-data-explorer/data_type/quantitative.rb +109 -0
- data/lib/rails-data-explorer/data_type/quantitative/decimal.rb +13 -0
- data/lib/rails-data-explorer/data_type/quantitative/integer.rb +13 -0
- data/lib/rails-data-explorer/data_type/quantitative/temporal.rb +62 -0
- data/lib/rails-data-explorer/engine.rb +24 -0
- data/lib/rails-data-explorer/exploration.rb +89 -0
- data/lib/rails-data-explorer/statistics/pearsons_chi_squared_independence_test.rb +75 -0
- data/lib/rails-data-explorer/statistics/rng_category.rb +37 -0
- data/lib/rails-data-explorer/statistics/rng_gaussian.rb +24 -0
- data/lib/rails-data-explorer/statistics/rng_power_law.rb +21 -0
- data/lib/rails-data-explorer/utils/color_scale.rb +33 -0
- data/lib/rails-data-explorer/utils/data_binner.rb +8 -0
- data/lib/rails-data-explorer/utils/data_encoder.rb +2 -0
- data/lib/rails-data-explorer/utils/data_quantizer.rb +2 -0
- data/lib/rails-data-explorer/utils/value_formatter.rb +41 -0
- data/rails-data-explorer.gemspec +30 -0
- data/vendor/assets/javascripts/d3.boxplot.js +302 -0
- data/vendor/assets/javascripts/d3.parcoords.js +585 -0
- data/vendor/assets/javascripts/d3.parsets.js +663 -0
- data/vendor/assets/javascripts/d3.v3.js +9294 -0
- data/vendor/assets/javascripts/nv.d3.js +14369 -0
- data/vendor/assets/javascripts/rails-data-explorer.js +19 -0
- data/vendor/assets/stylesheets/bootstrap-theme.css +346 -0
- data/vendor/assets/stylesheets/bootstrap.css +1727 -0
- data/vendor/assets/stylesheets/d3.boxplot.css +20 -0
- data/vendor/assets/stylesheets/d3.parcoords.css +34 -0
- data/vendor/assets/stylesheets/d3.parsets.css +34 -0
- data/vendor/assets/stylesheets/nv.d3.css +769 -0
- data/vendor/assets/stylesheets/rails-data-explorer.css +21 -0
- data/vendor/assets/stylesheets/rde-default-style.css +42 -0
- 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
|
+
}
|