picky-statistics 4.5.0 → 4.5.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 (607) hide show
  1. data/lib/picky-statistics.rb +4 -2
  2. data/lib/picky-statistics/application/app.rb +10 -4
  3. data/lib/picky-statistics/application/javascripts/crossfilter.v1.min.js +1 -0
  4. data/lib/picky-statistics/application/javascripts/d3.v2.min.js +4 -0
  5. data/lib/picky-statistics/application/javascripts/helpers.js +258 -0
  6. data/lib/picky-statistics/application/javascripts/statistics.js +203 -63
  7. data/lib/picky-statistics/application/stylesheets/statistics.css +137 -71
  8. data/lib/picky-statistics/application/views/index.haml +42 -33
  9. data/lib/picky-statistics/logfile_reader.rb +106 -0
  10. data/spec/lib/picky-statistics/logfile_reader_spec.rb +57 -0
  11. metadata +12 -604
  12. data/lib/picky-statistics/application/javascripts/d3/LICENSE +0 -26
  13. data/lib/picky-statistics/application/javascripts/d3/Makefile +0 -268
  14. data/lib/picky-statistics/application/javascripts/d3/README.md +0 -51
  15. data/lib/picky-statistics/application/javascripts/d3/d3.chart.js +0 -984
  16. data/lib/picky-statistics/application/javascripts/d3/d3.chart.min.js +0 -1
  17. data/lib/picky-statistics/application/javascripts/d3/d3.csv.js +0 -92
  18. data/lib/picky-statistics/application/javascripts/d3/d3.csv.min.js +0 -1
  19. data/lib/picky-statistics/application/javascripts/d3/d3.geo.js +0 -938
  20. data/lib/picky-statistics/application/javascripts/d3/d3.geo.min.js +0 -1
  21. data/lib/picky-statistics/application/javascripts/d3/d3.geom.js +0 -835
  22. data/lib/picky-statistics/application/javascripts/d3/d3.geom.min.js +0 -1
  23. data/lib/picky-statistics/application/javascripts/d3/d3.js +0 -4690
  24. data/lib/picky-statistics/application/javascripts/d3/d3.layout.js +0 -1891
  25. data/lib/picky-statistics/application/javascripts/d3/d3.layout.min.js +0 -1
  26. data/lib/picky-statistics/application/javascripts/d3/d3.min.js +0 -2
  27. data/lib/picky-statistics/application/javascripts/d3/d3.time.js +0 -687
  28. data/lib/picky-statistics/application/javascripts/d3/d3.time.min.js +0 -1
  29. data/lib/picky-statistics/application/javascripts/d3/examples/albers/albers.html +0 -168
  30. data/lib/picky-statistics/application/javascripts/d3/examples/area/area-radial.html +0 -48
  31. data/lib/picky-statistics/application/javascripts/d3/examples/area/area.html +0 -113
  32. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-alternating.html +0 -50
  33. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-ggplot2.html +0 -68
  34. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-multiples.html +0 -117
  35. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-orientations.html +0 -63
  36. data/lib/picky-statistics/application/javascripts/d3/examples/axis/axis-transition.html +0 -153
  37. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.css +0 -21
  38. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.html +0 -99
  39. data/lib/picky-statistics/application/javascripts/d3/examples/azimuthal/azimuthal.js +0 -29
  40. data/lib/picky-statistics/application/javascripts/d3/examples/bar/bar-hierarchy.html +0 -223
  41. data/lib/picky-statistics/application/javascripts/d3/examples/bar/bar.html +0 -101
  42. data/lib/picky-statistics/application/javascripts/d3/examples/bar/sample-data.csv +0 -53
  43. data/lib/picky-statistics/application/javascripts/d3/examples/bonne/bonne.html +0 -159
  44. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.css +0 -4
  45. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.html +0 -19
  46. data/lib/picky-statistics/application/javascripts/d3/examples/box/box.js +0 -68
  47. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-ordinal.html +0 -92
  48. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-x.html +0 -92
  49. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush-y.html +0 -91
  50. data/lib/picky-statistics/application/javascripts/d3/examples/brush/brush.html +0 -98
  51. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.css +0 -8
  52. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.html +0 -14
  53. data/lib/picky-statistics/application/javascripts/d3/examples/bubble/bubble.js +0 -46
  54. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.css +0 -10
  55. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.html +0 -18
  56. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullet.js +0 -53
  57. data/lib/picky-statistics/application/javascripts/d3/examples/bullet/bullets.json +0 -7
  58. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.css +0 -9
  59. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.html +0 -15
  60. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-radial.js +0 -50
  61. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.css +0 -14
  62. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.html +0 -16
  63. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/bundle-treemap.js +0 -53
  64. data/lib/picky-statistics/application/javascripts/d3/examples/bundle/packages.js +0 -49
  65. data/lib/picky-statistics/application/javascripts/d3/examples/button.css +0 -35
  66. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/calendar.css +0 -15
  67. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji-area.html +0 -120
  68. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.csv +0 -5233
  69. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.html +0 -15
  70. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/dji.js +0 -65
  71. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.csv +0 -5231
  72. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.html +0 -15
  73. data/lib/picky-statistics/application/javascripts/d3/examples/calendar/vix.js +0 -65
  74. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.css +0 -20
  75. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.html +0 -15
  76. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/cartogram.js +0 -51
  77. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.css +0 -9
  78. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.html +0 -16
  79. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/demers.js +0 -79
  80. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.css +0 -9
  81. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.html +0 -16
  82. data/lib/picky-statistics/application/javascripts/d3/examples/cartogram/dorling.js +0 -80
  83. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord-flare.html +0 -109
  84. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.css +0 -9
  85. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.html +0 -14
  86. data/lib/picky-statistics/application/javascripts/d3/examples/chord/chord.js +0 -98
  87. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth-area.html +0 -51
  88. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth-bounds.html +0 -46
  89. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.css +0 -16
  90. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.html +0 -15
  91. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/choropleth.js +0 -38
  92. data/lib/picky-statistics/application/javascripts/d3/examples/choropleth/unemployment.json +0 -1
  93. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.css +0 -23
  94. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.html +0 -17
  95. data/lib/picky-statistics/application/javascripts/d3/examples/clock/clock.js +0 -87
  96. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster-radial.html +0 -14
  97. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster-radial.js +0 -39
  98. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.css +0 -15
  99. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.html +0 -14
  100. data/lib/picky-statistics/application/javascripts/d3/examples/cluster/cluster.js +0 -39
  101. data/lib/picky-statistics/application/javascripts/d3/examples/contour/contour.html +0 -108
  102. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea-stacked-area.html +0 -109
  103. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea-stacked-bar.html +0 -98
  104. data/lib/picky-statistics/application/javascripts/d3/examples/crimea/crimea.csv +0 -24
  105. data/lib/picky-statistics/application/javascripts/d3/examples/custom/custom.html +0 -83
  106. data/lib/picky-statistics/application/javascripts/d3/examples/data/README.md +0 -13
  107. data/lib/picky-statistics/application/javascripts/d3/examples/data/faithful.json +0 -8
  108. data/lib/picky-statistics/application/javascripts/d3/examples/data/flare-imports.json +0 -222
  109. data/lib/picky-statistics/application/javascripts/d3/examples/data/flare.json +0 -380
  110. data/lib/picky-statistics/application/javascripts/d3/examples/data/morley.csv +0 -101
  111. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.csv +0 -2
  112. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.html +0 -5
  113. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.json +0 -1
  114. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.txt +0 -1
  115. data/lib/picky-statistics/application/javascripts/d3/examples/data/sample.xml +0 -4
  116. data/lib/picky-statistics/application/javascripts/d3/examples/data/stocks.csv +0 -807
  117. data/lib/picky-statistics/application/javascripts/d3/examples/data/unemployment.csv +0 -1709
  118. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-borders.json +0 -1
  119. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-counties.json +0 -3216
  120. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-state-centroids.json +0 -54
  121. data/lib/picky-statistics/application/javascripts/d3/examples/data/us-states.json +0 -54
  122. data/lib/picky-statistics/application/javascripts/d3/examples/data/world-countries.json +0 -179
  123. data/lib/picky-statistics/application/javascripts/d3/examples/delaunay/delaunay.html +0 -44
  124. data/lib/picky-statistics/application/javascripts/d3/examples/donut/donut.html +0 -124
  125. data/lib/picky-statistics/application/javascripts/d3/examples/dot/dot.html +0 -103
  126. data/lib/picky-statistics/application/javascripts/d3/examples/drag/drag.html +0 -44
  127. data/lib/picky-statistics/application/javascripts/d3/examples/force/README +0 -10
  128. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-bounds.html +0 -70
  129. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-cluster.html +0 -249
  130. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-collapsible.html +0 -144
  131. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-dynamic.html +0 -118
  132. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-map.html +0 -104
  133. data/lib/picky-statistics/application/javascripts/d3/examples/force/force-multi-foci.html +0 -68
  134. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.css +0 -9
  135. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.html +0 -14
  136. data/lib/picky-statistics/application/javascripts/d3/examples/force/force.js +0 -50
  137. data/lib/picky-statistics/application/javascripts/d3/examples/force/miserables.json +0 -1
  138. data/lib/picky-statistics/application/javascripts/d3/examples/great-arc/great-arc.html +0 -78
  139. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-key.html +0 -60
  140. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-nested-key.html +0 -75
  141. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data-nested.html +0 -77
  142. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-data.html +0 -46
  143. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-event.html +0 -53
  144. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-node-key.html +0 -25
  145. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-order.html +0 -25
  146. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-sort.html +0 -75
  147. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transform.html +0 -41
  148. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transition-undefined.html +0 -43
  149. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-transition.html +0 -47
  150. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/hello-webkit-transition.html +0 -64
  151. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/select-enter-add.html +0 -29
  152. data/lib/picky-statistics/application/javascripts/d3/examples/hello-world/selectAll-enter-add.html +0 -20
  153. data/lib/picky-statistics/application/javascripts/d3/examples/histogram/histogram.html +0 -80
  154. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.css +0 -9
  155. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.html +0 -25
  156. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/horizon.js +0 -43
  157. data/lib/picky-statistics/application/javascripts/d3/examples/horizon/unemployment.json +0 -1
  158. data/lib/picky-statistics/application/javascripts/d3/examples/hull/hull.html +0 -75
  159. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.css +0 -9
  160. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.html +0 -14
  161. data/lib/picky-statistics/application/javascripts/d3/examples/kde/kde.js +0 -40
  162. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.css +0 -22
  163. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.html +0 -11
  164. data/lib/picky-statistics/application/javascripts/d3/examples/line/line.js +0 -63
  165. data/lib/picky-statistics/application/javascripts/d3/examples/marimekko/marimekko.html +0 -116
  166. data/lib/picky-statistics/application/javascripts/d3/examples/marimekko/marimekko.json +0 -18
  167. data/lib/picky-statistics/application/javascripts/d3/examples/marker/marker.html +0 -169
  168. data/lib/picky-statistics/application/javascripts/d3/examples/mercator/mercator.html +0 -133
  169. data/lib/picky-statistics/application/javascripts/d3/examples/moire/moire.html +0 -53
  170. data/lib/picky-statistics/application/javascripts/d3/examples/node-canvas/us-counties.js +0 -70
  171. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.css +0 -15
  172. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.html +0 -14
  173. data/lib/picky-statistics/application/javascripts/d3/examples/pack/pack.js +0 -33
  174. data/lib/picky-statistics/application/javascripts/d3/examples/parallel/cars.csv +0 -407
  175. data/lib/picky-statistics/application/javascripts/d3/examples/parallel/parallel.html +0 -134
  176. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-icicle-zoom.html +0 -59
  177. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-icicle.html +0 -45
  178. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst-zoom.html +0 -72
  179. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst.html +0 -21
  180. data/lib/picky-statistics/application/javascripts/d3/examples/partition/partition-sunburst.js +0 -72
  181. data/lib/picky-statistics/application/javascripts/d3/examples/pie/pie-transition.html +0 -69
  182. data/lib/picky-statistics/application/javascripts/d3/examples/pie/pie.html +0 -51
  183. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.css +0 -28
  184. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.csv +0 -571
  185. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.html +0 -13
  186. data/lib/picky-statistics/application/javascripts/d3/examples/population/population.js +0 -126
  187. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.css +0 -18
  188. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.html +0 -21
  189. data/lib/picky-statistics/application/javascripts/d3/examples/qq/qq.js +0 -66
  190. data/lib/picky-statistics/application/javascripts/d3/examples/qq/stats.js +0 -28
  191. data/lib/picky-statistics/application/javascripts/d3/examples/qq/turkers.json +0 -1
  192. data/lib/picky-statistics/application/javascripts/d3/examples/quadtree/quadtree.html +0 -114
  193. data/lib/picky-statistics/application/javascripts/d3/examples/showreel/showreel.html +0 -661
  194. data/lib/picky-statistics/application/javascripts/d3/examples/sizzle/sizzle.html +0 -27
  195. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.css +0 -4
  196. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.html +0 -12
  197. data/lib/picky-statistics/application/javascripts/d3/examples/sort/sort.js +0 -112
  198. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.css +0 -30
  199. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.html +0 -14
  200. data/lib/picky-statistics/application/javascripts/d3/examples/spline/spline.js +0 -113
  201. data/lib/picky-statistics/application/javascripts/d3/examples/splom/flowers.json +0 -1
  202. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.css +0 -49
  203. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.html +0 -13
  204. data/lib/picky-statistics/application/javascripts/d3/examples/splom/splom.js +0 -119
  205. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.css +0 -7
  206. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.html +0 -22
  207. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stack.js +0 -119
  208. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.css +0 -3
  209. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.html +0 -19
  210. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream.js +0 -42
  211. data/lib/picky-statistics/application/javascripts/d3/examples/stream/stream_layers.js +0 -33
  212. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/dot.html +0 -104
  213. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/explorer.html +0 -120
  214. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/superformula.html +0 -70
  215. data/lib/picky-statistics/application/javascripts/d3/examples/superformula/superformula.js +0 -98
  216. data/lib/picky-statistics/application/javascripts/d3/examples/symbol-map/symbol-map.html +0 -67
  217. data/lib/picky-statistics/application/javascripts/d3/examples/touch/touch.html +0 -65
  218. data/lib/picky-statistics/application/javascripts/d3/examples/transform/test.html +0 -85
  219. data/lib/picky-statistics/application/javascripts/d3/examples/transform/transform.html +0 -60
  220. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-dynamic.html +0 -111
  221. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-interactive.html +0 -172
  222. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-radial.html +0 -14
  223. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree-radial.js +0 -40
  224. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.css +0 -15
  225. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.html +0 -14
  226. data/lib/picky-statistics/application/javascripts/d3/examples/tree/tree.js +0 -39
  227. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap-svg.html +0 -22
  228. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap-svg.js +0 -34
  229. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.css +0 -8
  230. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.html +0 -22
  231. data/lib/picky-statistics/application/javascripts/d3/examples/treemap/treemap.js +0 -53
  232. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/boid.js +0 -235
  233. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.css +0 -15
  234. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.html +0 -14
  235. data/lib/picky-statistics/application/javascripts/d3/examples/voroboids/voroboids.js +0 -65
  236. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.css +0 -16
  237. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.html +0 -15
  238. data/lib/picky-statistics/application/javascripts/d3/examples/voronoi/voronoi.js +0 -34
  239. data/lib/picky-statistics/application/javascripts/d3/examples/zoom-pan/zoom-pan-transform.html +0 -96
  240. data/lib/picky-statistics/application/javascripts/d3/examples/zoom-pan/zoom-pan.html +0 -120
  241. data/lib/picky-statistics/application/javascripts/d3/examples/zoom/dji.csv +0 -5233
  242. data/lib/picky-statistics/application/javascripts/d3/examples/zoom/zoom.html +0 -162
  243. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/LICENSE +0 -38
  244. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/colorbrewer.css +0 -1327
  245. data/lib/picky-statistics/application/javascripts/d3/lib/colorbrewer/colorbrewer.js +0 -32
  246. data/lib/picky-statistics/application/javascripts/d3/lib/jit/LICENSE +0 -27
  247. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/LICENSE +0 -25
  248. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  249. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  250. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  251. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  252. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  253. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  254. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  255. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  256. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  257. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  258. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
  259. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
  260. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
  261. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  262. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/jquery-ui.css +0 -318
  263. data/lib/picky-statistics/application/javascripts/d3/lib/jquery-ui/jquery-ui.min.js +0 -83
  264. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/LICENSE +0 -20
  265. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/jquery.js +0 -6883
  266. data/lib/picky-statistics/application/javascripts/d3/lib/jquery/jquery.min.js +0 -166
  267. data/lib/picky-statistics/application/javascripts/d3/lib/polymaps/LICENSE +0 -28
  268. data/lib/picky-statistics/application/javascripts/d3/lib/protovis/LICENSE +0 -27
  269. data/lib/picky-statistics/application/javascripts/d3/lib/science/LICENSE +0 -26
  270. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.js +0 -225
  271. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.lin.js +0 -27
  272. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.lin.min.js +0 -1
  273. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.min.js +0 -1
  274. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.stats.js +0 -720
  275. data/lib/picky-statistics/application/javascripts/d3/lib/science/science.stats.min.js +0 -1
  276. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/LICENSE +0 -24
  277. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/sizzle.js +0 -1376
  278. data/lib/picky-statistics/application/javascripts/d3/lib/sizzle/sizzle.min.js +0 -28
  279. data/lib/picky-statistics/application/javascripts/d3/package.json +0 -28
  280. data/lib/picky-statistics/application/javascripts/d3/src/behavior/behavior.js +0 -1
  281. data/lib/picky-statistics/application/javascripts/d3/src/behavior/drag.js +0 -125
  282. data/lib/picky-statistics/application/javascripts/d3/src/behavior/zoom.js +0 -242
  283. data/lib/picky-statistics/application/javascripts/d3/src/chart/box.js +0 -297
  284. data/lib/picky-statistics/application/javascripts/d3/src/chart/bullet.js +0 -237
  285. data/lib/picky-statistics/application/javascripts/d3/src/chart/chart.js +0 -1
  286. data/lib/picky-statistics/application/javascripts/d3/src/chart/horizon.js +0 -203
  287. data/lib/picky-statistics/application/javascripts/d3/src/chart/qq.js +0 -245
  288. data/lib/picky-statistics/application/javascripts/d3/src/compat/date.js +0 -3
  289. data/lib/picky-statistics/application/javascripts/d3/src/compat/style.js +0 -9
  290. data/lib/picky-statistics/application/javascripts/d3/src/core/array.js +0 -29
  291. data/lib/picky-statistics/application/javascripts/d3/src/core/ascending.js +0 -3
  292. data/lib/picky-statistics/application/javascripts/d3/src/core/bisect.js +0 -38
  293. data/lib/picky-statistics/application/javascripts/d3/src/core/collapse.js +0 -3
  294. data/lib/picky-statistics/application/javascripts/d3/src/core/core.js +0 -1
  295. data/lib/picky-statistics/application/javascripts/d3/src/core/descending.js +0 -3
  296. data/lib/picky-statistics/application/javascripts/d3/src/core/dispatch.js +0 -60
  297. data/lib/picky-statistics/application/javascripts/d3/src/core/ease.js +0 -128
  298. data/lib/picky-statistics/application/javascripts/d3/src/core/entries.js +0 -5
  299. data/lib/picky-statistics/application/javascripts/d3/src/core/event.js +0 -6
  300. data/lib/picky-statistics/application/javascripts/d3/src/core/extent.js +0 -21
  301. data/lib/picky-statistics/application/javascripts/d3/src/core/first.js +0 -13
  302. data/lib/picky-statistics/application/javascripts/d3/src/core/format.js +0 -100
  303. data/lib/picky-statistics/application/javascripts/d3/src/core/formatPrefix.js +0 -20
  304. data/lib/picky-statistics/application/javascripts/d3/src/core/functor.js +0 -3
  305. data/lib/picky-statistics/application/javascripts/d3/src/core/hsl.js +0 -63
  306. data/lib/picky-statistics/application/javascripts/d3/src/core/html.js +0 -10
  307. data/lib/picky-statistics/application/javascripts/d3/src/core/interpolate.js +0 -183
  308. data/lib/picky-statistics/application/javascripts/d3/src/core/json.js +0 -5
  309. data/lib/picky-statistics/application/javascripts/d3/src/core/keys.js +0 -5
  310. data/lib/picky-statistics/application/javascripts/d3/src/core/last.js +0 -13
  311. data/lib/picky-statistics/application/javascripts/d3/src/core/max.js +0 -14
  312. data/lib/picky-statistics/application/javascripts/d3/src/core/mean.js +0 -13
  313. data/lib/picky-statistics/application/javascripts/d3/src/core/median.js +0 -5
  314. data/lib/picky-statistics/application/javascripts/d3/src/core/merge.js +0 -3
  315. data/lib/picky-statistics/application/javascripts/d3/src/core/min.js +0 -14
  316. data/lib/picky-statistics/application/javascripts/d3/src/core/nest.js +0 -87
  317. data/lib/picky-statistics/application/javascripts/d3/src/core/noop.js +0 -1
  318. data/lib/picky-statistics/application/javascripts/d3/src/core/ns.js +0 -17
  319. data/lib/picky-statistics/application/javascripts/d3/src/core/number.js +0 -3
  320. data/lib/picky-statistics/application/javascripts/d3/src/core/permute.js +0 -7
  321. data/lib/picky-statistics/application/javascripts/d3/src/core/quantile.js +0 -8
  322. data/lib/picky-statistics/application/javascripts/d3/src/core/random.js +0 -15
  323. data/lib/picky-statistics/application/javascripts/d3/src/core/range.js +0 -21
  324. data/lib/picky-statistics/application/javascripts/d3/src/core/rebind.js +0 -16
  325. data/lib/picky-statistics/application/javascripts/d3/src/core/requote.js +0 -5
  326. data/lib/picky-statistics/application/javascripts/d3/src/core/rgb.js +0 -287
  327. data/lib/picky-statistics/application/javascripts/d3/src/core/round.js +0 -5
  328. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-append.js +0 -15
  329. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-attr.js +0 -44
  330. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-call.js +0 -13
  331. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-classed.js +0 -61
  332. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-data.js +0 -110
  333. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-each.js +0 -9
  334. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-empty.js +0 -3
  335. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-enter-select.js +0 -24
  336. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-enter.js +0 -11
  337. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-filter.js +0 -26
  338. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-html.js +0 -6
  339. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-insert.js +0 -20
  340. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-map.js +0 -5
  341. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-node.js +0 -9
  342. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-on.js +0 -34
  343. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-order.js +0 -11
  344. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-property.js +0 -23
  345. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-remove.js +0 -9
  346. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-root.js +0 -18
  347. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-select.js +0 -30
  348. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-selectAll.js +0 -24
  349. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-sort.js +0 -12
  350. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-style.js +0 -26
  351. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-text.js +0 -6
  352. data/lib/picky-statistics/application/javascripts/d3/src/core/selection-transition.js +0 -14
  353. data/lib/picky-statistics/application/javascripts/d3/src/core/selection.js +0 -25
  354. data/lib/picky-statistics/application/javascripts/d3/src/core/split.js +0 -21
  355. data/lib/picky-statistics/application/javascripts/d3/src/core/sum.js +0 -14
  356. data/lib/picky-statistics/application/javascripts/d3/src/core/text.js +0 -10
  357. data/lib/picky-statistics/application/javascripts/d3/src/core/this.js +0 -3
  358. data/lib/picky-statistics/application/javascripts/d3/src/core/timer.js +0 -104
  359. data/lib/picky-statistics/application/javascripts/d3/src/core/transform.js +0 -58
  360. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-attr.js +0 -23
  361. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-delay.js +0 -6
  362. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-duration.js +0 -6
  363. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-each.js +0 -9
  364. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-remove.js +0 -6
  365. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-select.js +0 -22
  366. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-selectAll.js +0 -22
  367. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-style.js +0 -14
  368. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-text.js +0 -7
  369. data/lib/picky-statistics/application/javascripts/d3/src/core/transition-transition.js +0 -3
  370. data/lib/picky-statistics/application/javascripts/d3/src/core/transition.js +0 -125
  371. data/lib/picky-statistics/application/javascripts/d3/src/core/transpose.js +0 -3
  372. data/lib/picky-statistics/application/javascripts/d3/src/core/uninterpolate.js +0 -9
  373. data/lib/picky-statistics/application/javascripts/d3/src/core/values.js +0 -5
  374. data/lib/picky-statistics/application/javascripts/d3/src/core/xhr.js +0 -10
  375. data/lib/picky-statistics/application/javascripts/d3/src/core/xml.js +0 -10
  376. data/lib/picky-statistics/application/javascripts/d3/src/core/zip.js +0 -13
  377. data/lib/picky-statistics/application/javascripts/d3/src/csv/csv.js +0 -5
  378. data/lib/picky-statistics/application/javascripts/d3/src/csv/format.js +0 -13
  379. data/lib/picky-statistics/application/javascripts/d3/src/csv/parse.js +0 -73
  380. data/lib/picky-statistics/application/javascripts/d3/src/end.js +0 -1
  381. data/lib/picky-statistics/application/javascripts/d3/src/externs.js +0 -6
  382. data/lib/picky-statistics/application/javascripts/d3/src/geo/albers.js +0 -126
  383. data/lib/picky-statistics/application/javascripts/d3/src/geo/azimuthal.js +0 -80
  384. data/lib/picky-statistics/application/javascripts/d3/src/geo/bonne.js +0 -70
  385. data/lib/picky-statistics/application/javascripts/d3/src/geo/bounds.js +0 -83
  386. data/lib/picky-statistics/application/javascripts/d3/src/geo/circle.js +0 -146
  387. data/lib/picky-statistics/application/javascripts/d3/src/geo/equirectangular.js +0 -36
  388. data/lib/picky-statistics/application/javascripts/d3/src/geo/geo.js +0 -3
  389. data/lib/picky-statistics/application/javascripts/d3/src/geo/greatArc.js +0 -80
  390. data/lib/picky-statistics/application/javascripts/d3/src/geo/greatCircle.js +0 -1
  391. data/lib/picky-statistics/application/javascripts/d3/src/geo/mercator.js +0 -36
  392. data/lib/picky-statistics/application/javascripts/d3/src/geo/path.js +0 -271
  393. data/lib/picky-statistics/application/javascripts/d3/src/geo/type.js +0 -5
  394. data/lib/picky-statistics/application/javascripts/d3/src/geom/contour.js +0 -78
  395. data/lib/picky-statistics/application/javascripts/d3/src/geom/delaunay.js +0 -31
  396. data/lib/picky-statistics/application/javascripts/d3/src/geom/geom.js +0 -1
  397. data/lib/picky-statistics/application/javascripts/d3/src/geom/hull.js +0 -98
  398. data/lib/picky-statistics/application/javascripts/d3/src/geom/polygon.js +0 -88
  399. data/lib/picky-statistics/application/javascripts/d3/src/geom/quadtree.js +0 -129
  400. data/lib/picky-statistics/application/javascripts/d3/src/geom/voronoi.js +0 -409
  401. data/lib/picky-statistics/application/javascripts/d3/src/layout/bundle.js +0 -57
  402. data/lib/picky-statistics/application/javascripts/d3/src/layout/chord.js +0 -153
  403. data/lib/picky-statistics/application/javascripts/d3/src/layout/cluster.js +0 -78
  404. data/lib/picky-statistics/application/javascripts/d3/src/layout/force.js +0 -342
  405. data/lib/picky-statistics/application/javascripts/d3/src/layout/hierarchy.js +0 -120
  406. data/lib/picky-statistics/application/javascripts/d3/src/layout/histogram.js +0 -102
  407. data/lib/picky-statistics/application/javascripts/d3/src/layout/layout.js +0 -1
  408. data/lib/picky-statistics/application/javascripts/d3/src/layout/pack.js +0 -203
  409. data/lib/picky-statistics/application/javascripts/d3/src/layout/partition.js +0 -48
  410. data/lib/picky-statistics/application/javascripts/d3/src/layout/pie.js +0 -95
  411. data/lib/picky-statistics/application/javascripts/d3/src/layout/stack.js +0 -237
  412. data/lib/picky-statistics/application/javascripts/d3/src/layout/tree.js +0 -237
  413. data/lib/picky-statistics/application/javascripts/d3/src/layout/treemap.js +0 -217
  414. data/lib/picky-statistics/application/javascripts/d3/src/package.js +0 -18
  415. data/lib/picky-statistics/application/javascripts/d3/src/scale/bilinear.js +0 -7
  416. data/lib/picky-statistics/application/javascripts/d3/src/scale/category.js +0 -54
  417. data/lib/picky-statistics/application/javascripts/d3/src/scale/linear.js +0 -111
  418. data/lib/picky-statistics/application/javascripts/d3/src/scale/log.js +0 -85
  419. data/lib/picky-statistics/application/javascripts/d3/src/scale/nice.js +0 -24
  420. data/lib/picky-statistics/application/javascripts/d3/src/scale/ordinal.js +0 -81
  421. data/lib/picky-statistics/application/javascripts/d3/src/scale/polylinear.js +0 -16
  422. data/lib/picky-statistics/application/javascripts/d3/src/scale/pow.js +0 -54
  423. data/lib/picky-statistics/application/javascripts/d3/src/scale/quantile.js +0 -43
  424. data/lib/picky-statistics/application/javascripts/d3/src/scale/quantize.js +0 -36
  425. data/lib/picky-statistics/application/javascripts/d3/src/scale/scale.js +0 -10
  426. data/lib/picky-statistics/application/javascripts/d3/src/scale/sqrt.js +0 -3
  427. data/lib/picky-statistics/application/javascripts/d3/src/start.js +0 -1
  428. data/lib/picky-statistics/application/javascripts/d3/src/svg/arc.js +0 -95
  429. data/lib/picky-statistics/application/javascripts/d3/src/svg/area-radial.js +0 -10
  430. data/lib/picky-statistics/application/javascripts/d3/src/svg/area.js +0 -89
  431. data/lib/picky-statistics/application/javascripts/d3/src/svg/axis.js +0 -200
  432. data/lib/picky-statistics/application/javascripts/d3/src/svg/brush.js +0 -334
  433. data/lib/picky-statistics/application/javascripts/d3/src/svg/chord.js +0 -99
  434. data/lib/picky-statistics/application/javascripts/d3/src/svg/diagonal-radial.js +0 -22
  435. data/lib/picky-statistics/application/javascripts/d3/src/svg/diagonal.js +0 -38
  436. data/lib/picky-statistics/application/javascripts/d3/src/svg/line-radial.js +0 -22
  437. data/lib/picky-statistics/application/javascripts/d3/src/svg/line.js +0 -415
  438. data/lib/picky-statistics/application/javascripts/d3/src/svg/mouse.js +0 -29
  439. data/lib/picky-statistics/application/javascripts/d3/src/svg/svg.js +0 -1
  440. data/lib/picky-statistics/application/javascripts/d3/src/svg/symbol.js +0 -98
  441. data/lib/picky-statistics/application/javascripts/d3/src/svg/touches.js +0 -9
  442. data/lib/picky-statistics/application/javascripts/d3/src/time/day.js +0 -7
  443. data/lib/picky-statistics/application/javascripts/d3/src/time/days.js +0 -11
  444. data/lib/picky-statistics/application/javascripts/d3/src/time/format-iso.js +0 -13
  445. data/lib/picky-statistics/application/javascripts/d3/src/time/format-utc.js +0 -53
  446. data/lib/picky-statistics/application/javascripts/d3/src/time/format.js +0 -327
  447. data/lib/picky-statistics/application/javascripts/d3/src/time/hour.js +0 -8
  448. data/lib/picky-statistics/application/javascripts/d3/src/time/hours.js +0 -11
  449. data/lib/picky-statistics/application/javascripts/d3/src/time/minute.js +0 -5
  450. data/lib/picky-statistics/application/javascripts/d3/src/time/minutes.js +0 -11
  451. data/lib/picky-statistics/application/javascripts/d3/src/time/month.js +0 -7
  452. data/lib/picky-statistics/application/javascripts/d3/src/time/months.js +0 -11
  453. data/lib/picky-statistics/application/javascripts/d3/src/time/range.js +0 -16
  454. data/lib/picky-statistics/application/javascripts/d3/src/time/scale-utc.js +0 -36
  455. data/lib/picky-statistics/application/javascripts/d3/src/time/scale.js +0 -118
  456. data/lib/picky-statistics/application/javascripts/d3/src/time/second.js +0 -5
  457. data/lib/picky-statistics/application/javascripts/d3/src/time/seconds.js +0 -7
  458. data/lib/picky-statistics/application/javascripts/d3/src/time/time.js +0 -3
  459. data/lib/picky-statistics/application/javascripts/d3/src/time/week.js +0 -9
  460. data/lib/picky-statistics/application/javascripts/d3/src/time/weeks.js +0 -11
  461. data/lib/picky-statistics/application/javascripts/d3/src/time/year.js +0 -7
  462. data/lib/picky-statistics/application/javascripts/d3/src/time/years.js +0 -11
  463. data/lib/picky-statistics/application/javascripts/d3/test/core/ascending-test.js +0 -47
  464. data/lib/picky-statistics/application/javascripts/d3/test/core/bisect-test.js +0 -103
  465. data/lib/picky-statistics/application/javascripts/d3/test/core/descending-test.js +0 -47
  466. data/lib/picky-statistics/application/javascripts/d3/test/core/dispatch-test.js +0 -129
  467. data/lib/picky-statistics/application/javascripts/d3/test/core/ease-test.js +0 -129
  468. data/lib/picky-statistics/application/javascripts/d3/test/core/entries-test.js +0 -43
  469. data/lib/picky-statistics/application/javascripts/d3/test/core/extent-test.js +0 -51
  470. data/lib/picky-statistics/application/javascripts/d3/test/core/first-test.js +0 -42
  471. data/lib/picky-statistics/application/javascripts/d3/test/core/format-test.js +0 -239
  472. data/lib/picky-statistics/application/javascripts/d3/test/core/formatPrefix-test.js +0 -108
  473. data/lib/picky-statistics/application/javascripts/d3/test/core/functor-test.js +0 -29
  474. data/lib/picky-statistics/application/javascripts/d3/test/core/hsl-test.js +0 -82
  475. data/lib/picky-statistics/application/javascripts/d3/test/core/html-test.js +0 -37
  476. data/lib/picky-statistics/application/javascripts/d3/test/core/interpolate-test.js +0 -209
  477. data/lib/picky-statistics/application/javascripts/d3/test/core/json-test.js +0 -37
  478. data/lib/picky-statistics/application/javascripts/d3/test/core/keys-test.js +0 -31
  479. data/lib/picky-statistics/application/javascripts/d3/test/core/last-test.js +0 -42
  480. data/lib/picky-statistics/application/javascripts/d3/test/core/max-test.js +0 -51
  481. data/lib/picky-statistics/application/javascripts/d3/test/core/mean-test.js +0 -43
  482. data/lib/picky-statistics/application/javascripts/d3/test/core/median-test.js +0 -43
  483. data/lib/picky-statistics/application/javascripts/d3/test/core/merge-test.js +0 -27
  484. data/lib/picky-statistics/application/javascripts/d3/test/core/min-test.js +0 -50
  485. data/lib/picky-statistics/application/javascripts/d3/test/core/nest-test.js +0 -236
  486. data/lib/picky-statistics/application/javascripts/d3/test/core/ns-test.js +0 -58
  487. data/lib/picky-statistics/application/javascripts/d3/test/core/permute-test.js +0 -53
  488. data/lib/picky-statistics/application/javascripts/d3/test/core/quantile-test.js +0 -50
  489. data/lib/picky-statistics/application/javascripts/d3/test/core/range-test.js +0 -93
  490. data/lib/picky-statistics/application/javascripts/d3/test/core/rebind-test.js +0 -52
  491. data/lib/picky-statistics/application/javascripts/d3/test/core/requote-test.js +0 -53
  492. data/lib/picky-statistics/application/javascripts/d3/test/core/rgb-test.js +0 -89
  493. data/lib/picky-statistics/application/javascripts/d3/test/core/round-test.js +0 -70
  494. data/lib/picky-statistics/application/javascripts/d3/test/core/select-test.js +0 -42
  495. data/lib/picky-statistics/application/javascripts/d3/test/core/selectAll-test.js +0 -46
  496. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-append-test.js +0 -123
  497. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-attr-test.js +0 -153
  498. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-call-test.js +0 -71
  499. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-classed-test.js +0 -219
  500. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-data-test.js +0 -168
  501. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-each-test.js +0 -83
  502. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-empty-test.js +0 -51
  503. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-filter-test.js +0 -70
  504. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-html-test.js +0 -121
  505. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-insert-test.js +0 -136
  506. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-map-test.js +0 -47
  507. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-node-test.js +0 -50
  508. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-on-test.js +0 -95
  509. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-order-test.js +0 -32
  510. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-property-test.js +0 -91
  511. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-remove-test.js +0 -39
  512. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-select-test.js +0 -125
  513. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-selectAll-test.js +0 -128
  514. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-sort-test.js +0 -59
  515. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-style-test.js +0 -100
  516. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-test.js +0 -35
  517. data/lib/picky-statistics/application/javascripts/d3/test/core/selection-text-test.js +0 -109
  518. data/lib/picky-statistics/application/javascripts/d3/test/core/split-test.js +0 -34
  519. data/lib/picky-statistics/application/javascripts/d3/test/core/sum-test.js +0 -47
  520. data/lib/picky-statistics/application/javascripts/d3/test/core/text-test.js +0 -48
  521. data/lib/picky-statistics/application/javascripts/d3/test/core/timer-test.js +0 -62
  522. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-attr.js +0 -54
  523. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-attrTween.js +0 -67
  524. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-call.js +0 -33
  525. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-delay.js +0 -41
  526. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-duration.js +0 -41
  527. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-each.js +0 -166
  528. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-id.js +0 -20
  529. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-remove.js +0 -46
  530. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-select.js +0 -63
  531. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-selectAll.js +0 -59
  532. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-style.js +0 -49
  533. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-styleTween.js +0 -73
  534. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-text.js +0 -30
  535. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-time.js +0 -36
  536. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-transition.js +0 -60
  537. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test-tween.js +0 -71
  538. data/lib/picky-statistics/application/javascripts/d3/test/core/transition-test.js +0 -66
  539. data/lib/picky-statistics/application/javascripts/d3/test/core/transpose-test.js +0 -32
  540. data/lib/picky-statistics/application/javascripts/d3/test/core/values-test.js +0 -35
  541. data/lib/picky-statistics/application/javascripts/d3/test/core/version-test.js +0 -18
  542. data/lib/picky-statistics/application/javascripts/d3/test/core/xhr-test.js +0 -56
  543. data/lib/picky-statistics/application/javascripts/d3/test/core/xml-test.js +0 -48
  544. data/lib/picky-statistics/application/javascripts/d3/test/core/zip-test.js +0 -32
  545. data/lib/picky-statistics/application/javascripts/d3/test/csv/csv-test.js +0 -38
  546. data/lib/picky-statistics/application/javascripts/d3/test/csv/format-test.js +0 -39
  547. data/lib/picky-statistics/application/javascripts/d3/test/csv/parse-test.js +0 -101
  548. data/lib/picky-statistics/application/javascripts/d3/test/env-assert.js +0 -96
  549. data/lib/picky-statistics/application/javascripts/d3/test/env-fragment.js +0 -8
  550. data/lib/picky-statistics/application/javascripts/d3/test/env-xhr.js +0 -56
  551. data/lib/picky-statistics/application/javascripts/d3/test/env.js +0 -13
  552. data/lib/picky-statistics/application/javascripts/d3/test/geo/albers-test.js +0 -57
  553. data/lib/picky-statistics/application/javascripts/d3/test/geo/azimuthal-test.js +0 -261
  554. data/lib/picky-statistics/application/javascripts/d3/test/geo/bonne-test.js +0 -116
  555. data/lib/picky-statistics/application/javascripts/d3/test/geo/equirectangular-test.js +0 -50
  556. data/lib/picky-statistics/application/javascripts/d3/test/geo/greatArc-test.js +0 -41
  557. data/lib/picky-statistics/application/javascripts/d3/test/geo/mercator-test.js +0 -57
  558. data/lib/picky-statistics/application/javascripts/d3/test/geo/path-test.js +0 -25
  559. data/lib/picky-statistics/application/javascripts/d3/test/geom/polygon-test.js +0 -57
  560. data/lib/picky-statistics/application/javascripts/d3/test/layout/cluster-test.js +0 -39
  561. data/lib/picky-statistics/application/javascripts/d3/test/layout/hierarchy-test.js +0 -30
  562. data/lib/picky-statistics/application/javascripts/d3/test/layout/histogram-test.js +0 -91
  563. data/lib/picky-statistics/application/javascripts/d3/test/layout/pack-test.js +0 -67
  564. data/lib/picky-statistics/application/javascripts/d3/test/layout/partition-test.js +0 -50
  565. data/lib/picky-statistics/application/javascripts/d3/test/layout/tree-test.js +0 -41
  566. data/lib/picky-statistics/application/javascripts/d3/test/layout/treemap-test.js +0 -190
  567. data/lib/picky-statistics/application/javascripts/d3/test/scale/category-test.js +0 -74
  568. data/lib/picky-statistics/application/javascripts/d3/test/scale/linear-test.js +0 -243
  569. data/lib/picky-statistics/application/javascripts/d3/test/scale/log-test.js +0 -266
  570. data/lib/picky-statistics/application/javascripts/d3/test/scale/ordinal-test.js +0 -207
  571. data/lib/picky-statistics/application/javascripts/d3/test/scale/pow-test.js +0 -263
  572. data/lib/picky-statistics/application/javascripts/d3/test/scale/quantile-test.js +0 -64
  573. data/lib/picky-statistics/application/javascripts/d3/test/scale/quantize-test.js +0 -69
  574. data/lib/picky-statistics/application/javascripts/d3/test/scale/sqrt-test.js +0 -256
  575. data/lib/picky-statistics/application/javascripts/d3/test/svg/arc-test.js +0 -147
  576. data/lib/picky-statistics/application/javascripts/d3/test/svg/area-radial-test.js +0 -200
  577. data/lib/picky-statistics/application/javascripts/d3/test/svg/area-test.js +0 -192
  578. data/lib/picky-statistics/application/javascripts/d3/test/svg/axis-test.js +0 -353
  579. data/lib/picky-statistics/application/javascripts/d3/test/svg/line-radial-test.js +0 -125
  580. data/lib/picky-statistics/application/javascripts/d3/test/svg/line-test.js +0 -189
  581. data/lib/picky-statistics/application/javascripts/d3/test/svg/symbol-test.js +0 -96
  582. data/lib/picky-statistics/application/javascripts/d3/test/time/day-test.js +0 -65
  583. data/lib/picky-statistics/application/javascripts/d3/test/time/days-test.js +0 -105
  584. data/lib/picky-statistics/application/javascripts/d3/test/time/format-test.js +0 -467
  585. data/lib/picky-statistics/application/javascripts/d3/test/time/hour-test.js +0 -103
  586. data/lib/picky-statistics/application/javascripts/d3/test/time/hours-test.js +0 -135
  587. data/lib/picky-statistics/application/javascripts/d3/test/time/minute-test.js +0 -43
  588. data/lib/picky-statistics/application/javascripts/d3/test/time/minutes-test.js +0 -101
  589. data/lib/picky-statistics/application/javascripts/d3/test/time/month-test.js +0 -53
  590. data/lib/picky-statistics/application/javascripts/d3/test/time/months-test.js +0 -105
  591. data/lib/picky-statistics/application/javascripts/d3/test/time/scale-test.js +0 -525
  592. data/lib/picky-statistics/application/javascripts/d3/test/time/second-test.js +0 -41
  593. data/lib/picky-statistics/application/javascripts/d3/test/time/seconds-test.js +0 -101
  594. data/lib/picky-statistics/application/javascripts/d3/test/time/week-test.js +0 -59
  595. data/lib/picky-statistics/application/javascripts/d3/test/time/weeks-test.js +0 -105
  596. data/lib/picky-statistics/application/javascripts/d3/test/time/year-test.js +0 -41
  597. data/lib/picky-statistics/application/javascripts/d3/test/time/years-test.js +0 -73
  598. data/lib/picky-statistics/application/javascripts/full_live.js +0 -60
  599. data/lib/picky-statistics/application/javascripts/graph.js +0 -83
  600. data/lib/picky-statistics/application/javascripts/jquery-1.4.4.min.js +0 -167
  601. data/lib/picky-statistics/application/javascripts/jquery.sparkline-1.6.min.js +0 -94
  602. data/lib/picky-statistics/application/javascripts/results.js +0 -86
  603. data/lib/picky-statistics/application/javascripts/rickshaw.js +0 -1
  604. data/lib/picky-statistics/statistics/count.rb +0 -70
  605. data/lib/picky-statistics/statistics/logfile_reader.rb +0 -143
  606. data/spec/lib/picky-statistics/statistics/count_spec.rb +0 -15
  607. data/spec/lib/picky-statistics/statistics/logfile_reader_spec.rb +0 -47
@@ -1,26 +0,0 @@
1
- Copyright (c) 2010, Michael Bostock
2
- All rights reserved.
3
-
4
- Redistribution and use in source and binary forms, with or without
5
- modification, are permitted provided that the following conditions are met:
6
-
7
- * Redistributions of source code must retain the above copyright notice, this
8
- list of conditions and the following disclaimer.
9
-
10
- * Redistributions in binary form must reproduce the above copyright notice,
11
- this list of conditions and the following disclaimer in the documentation
12
- and/or other materials provided with the distribution.
13
-
14
- * The name Michael Bostock may not be used to endorse or promote products
15
- derived from this software without specific prior written permission.
16
-
17
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
- DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
21
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24
- OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,268 +0,0 @@
1
- # See the README for installation instructions.
2
-
3
- NODE_PATH ?= ./node_modules
4
- JS_COMPILER = $(NODE_PATH)/uglify-js/bin/uglifyjs
5
- JS_TESTER = $(NODE_PATH)/vows/bin/vows
6
-
7
- JS_FILES = \
8
- d3.js \
9
- d3.chart.js \
10
- d3.layout.js \
11
- d3.csv.js \
12
- d3.geo.js \
13
- d3.geom.js \
14
- d3.time.js
15
-
16
- all: \
17
- $(JS_FILES) \
18
- $(JS_FILES:.js=.min.js) \
19
- package.json
20
-
21
- # Modify this rule to build your own custom release.
22
- # Run `make d3.custom.min.js` to produce the minified version.
23
-
24
- d3.custom.js: \
25
- d3.js \
26
- d3.geom.js \
27
- d3.layout.js
28
-
29
- .INTERMEDIATE d3.js: \
30
- src/start.js \
31
- d3.core.js \
32
- d3.scale.js \
33
- d3.svg.js \
34
- d3.behavior.js \
35
- src/end.js
36
-
37
- d3.core.js: \
38
- src/compat/date.js \
39
- src/compat/style.js \
40
- src/core/core.js \
41
- src/core/array.js \
42
- src/core/this.js \
43
- src/core/functor.js \
44
- src/core/rebind.js \
45
- src/core/ascending.js \
46
- src/core/descending.js \
47
- src/core/mean.js \
48
- src/core/median.js \
49
- src/core/min.js \
50
- src/core/max.js \
51
- src/core/extent.js \
52
- src/core/random.js \
53
- src/core/number.js \
54
- src/core/sum.js \
55
- src/core/quantile.js \
56
- src/core/transpose.js \
57
- src/core/zip.js \
58
- src/core/bisect.js \
59
- src/core/first.js \
60
- src/core/last.js \
61
- src/core/nest.js \
62
- src/core/keys.js \
63
- src/core/values.js \
64
- src/core/entries.js \
65
- src/core/permute.js \
66
- src/core/merge.js \
67
- src/core/split.js \
68
- src/core/collapse.js \
69
- src/core/range.js \
70
- src/core/requote.js \
71
- src/core/round.js \
72
- src/core/xhr.js \
73
- src/core/text.js \
74
- src/core/json.js \
75
- src/core/html.js \
76
- src/core/xml.js \
77
- src/core/ns.js \
78
- src/core/dispatch.js \
79
- src/core/format.js \
80
- src/core/formatPrefix.js \
81
- src/core/ease.js \
82
- src/core/event.js \
83
- src/core/interpolate.js \
84
- src/core/uninterpolate.js \
85
- src/core/rgb.js \
86
- src/core/hsl.js \
87
- src/core/selection.js \
88
- src/core/selection-select.js \
89
- src/core/selection-selectAll.js \
90
- src/core/selection-attr.js \
91
- src/core/selection-classed.js \
92
- src/core/selection-style.js \
93
- src/core/selection-property.js \
94
- src/core/selection-text.js \
95
- src/core/selection-html.js \
96
- src/core/selection-append.js \
97
- src/core/selection-insert.js \
98
- src/core/selection-remove.js \
99
- src/core/selection-data.js \
100
- src/core/selection-filter.js \
101
- src/core/selection-map.js \
102
- src/core/selection-order.js \
103
- src/core/selection-sort.js \
104
- src/core/selection-on.js \
105
- src/core/selection-each.js \
106
- src/core/selection-call.js \
107
- src/core/selection-empty.js \
108
- src/core/selection-node.js \
109
- src/core/selection-transition.js \
110
- src/core/selection-root.js \
111
- src/core/selection-enter.js \
112
- src/core/selection-enter-select.js \
113
- src/core/transition.js \
114
- src/core/transition-select.js \
115
- src/core/transition-selectAll.js \
116
- src/core/transition-attr.js \
117
- src/core/transition-style.js \
118
- src/core/transition-text.js \
119
- src/core/transition-remove.js \
120
- src/core/transition-delay.js \
121
- src/core/transition-duration.js \
122
- src/core/transition-each.js \
123
- src/core/transition-transition.js \
124
- src/core/timer.js \
125
- src/core/transform.js \
126
- src/core/noop.js
127
-
128
- d3.scale.js: \
129
- src/scale/scale.js \
130
- src/scale/nice.js \
131
- src/scale/linear.js \
132
- src/scale/bilinear.js \
133
- src/scale/polylinear.js \
134
- src/scale/log.js \
135
- src/scale/pow.js \
136
- src/scale/sqrt.js \
137
- src/scale/ordinal.js \
138
- src/scale/category.js \
139
- src/scale/quantile.js \
140
- src/scale/quantize.js
141
-
142
- d3.svg.js: \
143
- src/svg/svg.js \
144
- src/svg/arc.js \
145
- src/svg/line.js \
146
- src/svg/line-radial.js \
147
- src/svg/area.js \
148
- src/svg/area-radial.js \
149
- src/svg/chord.js \
150
- src/svg/diagonal.js \
151
- src/svg/diagonal-radial.js \
152
- src/svg/mouse.js \
153
- src/svg/touches.js \
154
- src/svg/symbol.js \
155
- src/svg/axis.js \
156
- src/svg/brush.js
157
-
158
- d3.behavior.js: \
159
- src/behavior/behavior.js \
160
- src/behavior/drag.js \
161
- src/behavior/zoom.js
162
-
163
- d3.chart.js: \
164
- src/start.js \
165
- src/chart/chart.js \
166
- src/chart/box.js \
167
- src/chart/bullet.js \
168
- src/chart/horizon.js \
169
- src/chart/qq.js \
170
- src/end.js
171
-
172
- d3.layout.js: \
173
- src/start.js \
174
- src/layout/layout.js \
175
- src/layout/bundle.js \
176
- src/layout/chord.js \
177
- src/layout/force.js \
178
- src/layout/partition.js \
179
- src/layout/pie.js \
180
- src/layout/stack.js \
181
- src/layout/histogram.js \
182
- src/layout/hierarchy.js \
183
- src/layout/pack.js \
184
- src/layout/cluster.js \
185
- src/layout/tree.js \
186
- src/layout/treemap.js \
187
- src/end.js
188
-
189
- d3.geo.js: \
190
- src/start.js \
191
- src/geo/geo.js \
192
- src/geo/azimuthal.js \
193
- src/geo/albers.js \
194
- src/geo/bonne.js \
195
- src/geo/equirectangular.js \
196
- src/geo/mercator.js \
197
- src/geo/type.js \
198
- src/geo/path.js \
199
- src/geo/bounds.js \
200
- src/geo/circle.js \
201
- src/geo/greatArc.js \
202
- src/geo/greatCircle.js \
203
- src/end.js
204
-
205
- d3.csv.js: \
206
- src/start.js \
207
- src/csv/csv.js \
208
- src/csv/parse.js \
209
- src/csv/format.js \
210
- src/end.js
211
-
212
- d3.time.js: \
213
- src/start.js \
214
- src/time/time.js \
215
- src/time/format.js \
216
- src/time/format-utc.js \
217
- src/time/format-iso.js \
218
- src/time/range.js \
219
- src/time/second.js \
220
- src/time/seconds.js \
221
- src/time/minute.js \
222
- src/time/minutes.js \
223
- src/time/hour.js \
224
- src/time/hours.js \
225
- src/time/day.js \
226
- src/time/days.js \
227
- src/time/week.js \
228
- src/time/weeks.js \
229
- src/time/month.js \
230
- src/time/months.js \
231
- src/time/year.js \
232
- src/time/years.js \
233
- src/time/scale.js \
234
- src/time/scale-utc.js \
235
- src/end.js
236
-
237
- d3.geom.js: \
238
- src/start.js \
239
- src/geom/geom.js \
240
- src/geom/contour.js \
241
- src/geom/hull.js \
242
- src/geom/polygon.js \
243
- src/geom/voronoi.js \
244
- src/geom/delaunay.js \
245
- src/geom/quadtree.js \
246
- src/end.js
247
-
248
- test: all
249
- @$(JS_TESTER)
250
-
251
- %.min.js: %.js Makefile
252
- @rm -f $@
253
- $(JS_COMPILER) < $< > $@
254
-
255
- d3.%: Makefile
256
- @rm -f $@
257
- cat $(filter %.js,$^) > $@
258
- @chmod a-w $@
259
-
260
- install:
261
- mkdir -p node_modules
262
- npm install
263
-
264
- package.json: d3.js src/package.js
265
- node src/package.js > $@
266
-
267
- clean:
268
- rm -f d3*.js
@@ -1,51 +0,0 @@
1
- # D3
2
-
3
- **D3** is a small, free JavaScript library for manipulating HTML documents
4
- based on data. D3 can help you quickly visualize your data as HTML or SVG,
5
- handle interactivity, and incorporate smooth transitions and staged animations
6
- into your pages. You can use D3 as a visualization framework (like Protovis),
7
- or you can use it to build dynamic pages (like jQuery).
8
-
9
- ### Browser Support
10
-
11
- D3 should work on any browser, with minimal requirements such as JavaScript
12
- and the [W3C DOM](http://www.w3.org/DOM/) API. By default D3 requires the
13
- [Selectors API](http://www.w3.org/TR/selectors-api/) Level 1, but you can
14
- preload [Sizzle](http://sizzlejs.com/) for compatibility with older browsers.
15
- Some of the included D3 examples use additional browser features, such as
16
- [SVG](http://www.w3.org/TR/SVG/) and [CSS3
17
- Transitions](http://www.w3.org/TR/css3-transitions/). These features are not
18
- required to use D3, but are useful for visualization! D3 is not a
19
- compatibility layer. The examples should work on Firefox, Chrome (Chromium),
20
- Safari (WebKit), Opera and IE9.
21
-
22
- Note: Chrome has strict permissions for reading files out of the local file
23
- system. Some examples use AJAX which works differently via HTTP instead of local
24
- files. For the best experience, load the D3 examples from your own machine via
25
- HTTP. Any static file web server will work; for example you can run Python's
26
- built-in server:
27
-
28
- python -m SimpleHTTPServer 8888
29
-
30
- Once this is running, go to: <http://localhost:8888/examples/>
31
-
32
- ### Development Setup
33
-
34
- This repository should work out of the box if you just want to create new
35
- visualizations using D3. On the other hand, if you want to extend D3 with new
36
- features, fix bugs, or run tests, you'll need to install a few more things.
37
-
38
- D3's test framework uses [Vows](http://vowsjs.org), which depends on
39
- [Node.js](http://nodejs.org/) and [NPM](http://npmjs.org/). If you are
40
- developing on Mac OS X, an easy way to install Node and NPM is using
41
- [Homebrew](http://mxcl.github.com/homebrew/):
42
-
43
- brew install node
44
- brew install npm
45
-
46
- Next, from the root directory of this repository, install D3's dependencies:
47
-
48
- make install
49
-
50
- You can see the list of dependencies in package.json. NPM will install the
51
- packages in the node_modules directory.
@@ -1,984 +0,0 @@
1
- (function(){d3.chart = {};
2
- // Inspired by http://informationandvisualization.de/blog/box-plot
3
- d3.chart.box = function() {
4
- var width = 1,
5
- height = 1,
6
- duration = 0,
7
- domain = null,
8
- value = Number,
9
- whiskers = d3_chart_boxWhiskers,
10
- quartiles = d3_chart_boxQuartiles,
11
- tickFormat = null;
12
-
13
- // For each small multiple…
14
- function box(g) {
15
- g.each(function(d, i) {
16
- d = d.map(value).sort(d3.ascending);
17
- var g = d3.select(this),
18
- n = d.length,
19
- min = d[0],
20
- max = d[n - 1];
21
-
22
- // Compute quartiles. Must return exactly 3 elements.
23
- var quartileData = d.quartiles = quartiles(d);
24
-
25
- // Compute whiskers. Must return exactly 2 elements, or null.
26
- var whiskerIndices = whiskers && whiskers.call(this, d, i),
27
- whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; });
28
-
29
- // Compute outliers. If no whiskers are specified, all data are "outliers".
30
- // We compute the outliers as indices, so that we can join across transitions!
31
- var outlierIndices = whiskerIndices
32
- ? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
33
- : d3.range(n);
34
-
35
- // Compute the new x-scale.
36
- var x1 = d3.scale.linear()
37
- .domain(domain && domain.call(this, d, i) || [min, max])
38
- .range([height, 0]);
39
-
40
- // Retrieve the old x-scale, if this is an update.
41
- var x0 = this.__chart__ || d3.scale.linear()
42
- .domain([0, Infinity])
43
- .range(x1.range());
44
-
45
- // Stash the new scale.
46
- this.__chart__ = x1;
47
-
48
- // Note: the box, median, and box tick elements are fixed in number,
49
- // so we only have to handle enter and update. In contrast, the outliers
50
- // and other elements are variable, so we need to exit them! Variable
51
- // elements also fade in and out.
52
-
53
- // Update center line: the vertical line spanning the whiskers.
54
- var center = g.selectAll("line.center")
55
- .data(whiskerData ? [whiskerData] : []);
56
-
57
- center.enter().insert("svg:line", "rect")
58
- .attr("class", "center")
59
- .attr("x1", width / 2)
60
- .attr("y1", function(d) { return x0(d[0]); })
61
- .attr("x2", width / 2)
62
- .attr("y2", function(d) { return x0(d[1]); })
63
- .style("opacity", 1e-6)
64
- .transition()
65
- .duration(duration)
66
- .style("opacity", 1)
67
- .attr("y1", function(d) { return x1(d[0]); })
68
- .attr("y2", function(d) { return x1(d[1]); });
69
-
70
- center.transition()
71
- .duration(duration)
72
- .style("opacity", 1)
73
- .attr("y1", function(d) { return x1(d[0]); })
74
- .attr("y2", function(d) { return x1(d[1]); });
75
-
76
- center.exit().transition()
77
- .duration(duration)
78
- .style("opacity", 1e-6)
79
- .attr("y1", function(d) { return x1(d[0]); })
80
- .attr("y2", function(d) { return x1(d[1]); })
81
- .remove();
82
-
83
- // Update innerquartile box.
84
- var box = g.selectAll("rect.box")
85
- .data([quartileData]);
86
-
87
- box.enter().append("svg:rect")
88
- .attr("class", "box")
89
- .attr("x", 0)
90
- .attr("y", function(d) { return x0(d[2]); })
91
- .attr("width", width)
92
- .attr("height", function(d) { return x0(d[0]) - x0(d[2]); })
93
- .transition()
94
- .duration(duration)
95
- .attr("y", function(d) { return x1(d[2]); })
96
- .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
97
-
98
- box.transition()
99
- .duration(duration)
100
- .attr("y", function(d) { return x1(d[2]); })
101
- .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
102
-
103
- // Update median line.
104
- var medianLine = g.selectAll("line.median")
105
- .data([quartileData[1]]);
106
-
107
- medianLine.enter().append("svg:line")
108
- .attr("class", "median")
109
- .attr("x1", 0)
110
- .attr("y1", x0)
111
- .attr("x2", width)
112
- .attr("y2", x0)
113
- .transition()
114
- .duration(duration)
115
- .attr("y1", x1)
116
- .attr("y2", x1);
117
-
118
- medianLine.transition()
119
- .duration(duration)
120
- .attr("y1", x1)
121
- .attr("y2", x1);
122
-
123
- // Update whiskers.
124
- var whisker = g.selectAll("line.whisker")
125
- .data(whiskerData || []);
126
-
127
- whisker.enter().insert("svg:line", "circle, text")
128
- .attr("class", "whisker")
129
- .attr("x1", 0)
130
- .attr("y1", x0)
131
- .attr("x2", width)
132
- .attr("y2", x0)
133
- .style("opacity", 1e-6)
134
- .transition()
135
- .duration(duration)
136
- .attr("y1", x1)
137
- .attr("y2", x1)
138
- .style("opacity", 1);
139
-
140
- whisker.transition()
141
- .duration(duration)
142
- .attr("y1", x1)
143
- .attr("y2", x1)
144
- .style("opacity", 1);
145
-
146
- whisker.exit().transition()
147
- .duration(duration)
148
- .attr("y1", x1)
149
- .attr("y2", x1)
150
- .style("opacity", 1e-6)
151
- .remove();
152
-
153
- // Update outliers.
154
- var outlier = g.selectAll("circle.outlier")
155
- .data(outlierIndices, Number);
156
-
157
- outlier.enter().insert("svg:circle", "text")
158
- .attr("class", "outlier")
159
- .attr("r", 5)
160
- .attr("cx", width / 2)
161
- .attr("cy", function(i) { return x0(d[i]); })
162
- .style("opacity", 1e-6)
163
- .transition()
164
- .duration(duration)
165
- .attr("cy", function(i) { return x1(d[i]); })
166
- .style("opacity", 1);
167
-
168
- outlier.transition()
169
- .duration(duration)
170
- .attr("cy", function(i) { return x1(d[i]); })
171
- .style("opacity", 1);
172
-
173
- outlier.exit().transition()
174
- .duration(duration)
175
- .attr("cy", function(i) { return x1(d[i]); })
176
- .style("opacity", 1e-6)
177
- .remove();
178
-
179
- // Compute the tick format.
180
- var format = tickFormat || x1.tickFormat(8);
181
-
182
- // Update box ticks.
183
- var boxTick = g.selectAll("text.box")
184
- .data(quartileData);
185
-
186
- boxTick.enter().append("svg:text")
187
- .attr("class", "box")
188
- .attr("dy", ".3em")
189
- .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
190
- .attr("x", function(d, i) { return i & 1 ? width : 0 })
191
- .attr("y", x0)
192
- .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
193
- .text(format)
194
- .transition()
195
- .duration(duration)
196
- .attr("y", x1);
197
-
198
- boxTick.transition()
199
- .duration(duration)
200
- .text(format)
201
- .attr("y", x1);
202
-
203
- // Update whisker ticks. These are handled separately from the box
204
- // ticks because they may or may not exist, and we want don't want
205
- // to join box ticks pre-transition with whisker ticks post-.
206
- var whiskerTick = g.selectAll("text.whisker")
207
- .data(whiskerData || []);
208
-
209
- whiskerTick.enter().append("svg:text")
210
- .attr("class", "whisker")
211
- .attr("dy", ".3em")
212
- .attr("dx", 6)
213
- .attr("x", width)
214
- .attr("y", x0)
215
- .text(format)
216
- .style("opacity", 1e-6)
217
- .transition()
218
- .duration(duration)
219
- .attr("y", x1)
220
- .style("opacity", 1);
221
-
222
- whiskerTick.transition()
223
- .duration(duration)
224
- .text(format)
225
- .attr("y", x1)
226
- .style("opacity", 1);
227
-
228
- whiskerTick.exit().transition()
229
- .duration(duration)
230
- .attr("y", x1)
231
- .style("opacity", 1e-6)
232
- .remove();
233
- });
234
- d3.timer.flush();
235
- }
236
-
237
- box.width = function(x) {
238
- if (!arguments.length) return width;
239
- width = x;
240
- return box;
241
- };
242
-
243
- box.height = function(x) {
244
- if (!arguments.length) return height;
245
- height = x;
246
- return box;
247
- };
248
-
249
- box.tickFormat = function(x) {
250
- if (!arguments.length) return tickFormat;
251
- tickFormat = x;
252
- return box;
253
- };
254
-
255
- box.duration = function(x) {
256
- if (!arguments.length) return duration;
257
- duration = x;
258
- return box;
259
- };
260
-
261
- box.domain = function(x) {
262
- if (!arguments.length) return domain;
263
- domain = x == null ? x : d3.functor(x);
264
- return box;
265
- };
266
-
267
- box.value = function(x) {
268
- if (!arguments.length) return value;
269
- value = x;
270
- return box;
271
- };
272
-
273
- box.whiskers = function(x) {
274
- if (!arguments.length) return whiskers;
275
- whiskers = x;
276
- return box;
277
- };
278
-
279
- box.quartiles = function(x) {
280
- if (!arguments.length) return quartiles;
281
- quartiles = x;
282
- return box;
283
- };
284
-
285
- return box;
286
- };
287
-
288
- function d3_chart_boxWhiskers(d) {
289
- return [0, d.length - 1];
290
- }
291
-
292
- function d3_chart_boxQuartiles(d) {
293
- return [
294
- d3.quantile(d, .25),
295
- d3.quantile(d, .5),
296
- d3.quantile(d, .75)
297
- ];
298
- }
299
- // Chart design based on the recommendations of Stephen Few. Implementation
300
- // based on the work of Clint Ivy, Jamie Love, and Jason Davies.
301
- // http://projects.instantcognition.com/protovis/bulletchart/
302
- d3.chart.bullet = function() {
303
- var orient = "left", // TODO top & bottom
304
- reverse = false,
305
- duration = 0,
306
- ranges = d3_chart_bulletRanges,
307
- markers = d3_chart_bulletMarkers,
308
- measures = d3_chart_bulletMeasures,
309
- width = 380,
310
- height = 30,
311
- tickFormat = null;
312
-
313
- // For each small multiple…
314
- function bullet(g) {
315
- g.each(function(d, i) {
316
- var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
317
- markerz = markers.call(this, d, i).slice().sort(d3.descending),
318
- measurez = measures.call(this, d, i).slice().sort(d3.descending),
319
- g = d3.select(this);
320
-
321
- // Compute the new x-scale.
322
- var x1 = d3.scale.linear()
323
- .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])
324
- .range(reverse ? [width, 0] : [0, width]);
325
-
326
- // Retrieve the old x-scale, if this is an update.
327
- var x0 = this.__chart__ || d3.scale.linear()
328
- .domain([0, Infinity])
329
- .range(x1.range());
330
-
331
- // Stash the new scale.
332
- this.__chart__ = x1;
333
-
334
- // Derive width-scales from the x-scales.
335
- var w0 = d3_chart_bulletWidth(x0),
336
- w1 = d3_chart_bulletWidth(x1);
337
-
338
- // Update the range rects.
339
- var range = g.selectAll("rect.range")
340
- .data(rangez);
341
-
342
- range.enter().append("svg:rect")
343
- .attr("class", function(d, i) { return "range s" + i; })
344
- .attr("width", w0)
345
- .attr("height", height)
346
- .attr("x", reverse ? x0 : 0)
347
- .transition()
348
- .duration(duration)
349
- .attr("width", w1)
350
- .attr("x", reverse ? x1 : 0);
351
-
352
- range.transition()
353
- .duration(duration)
354
- .attr("x", reverse ? x1 : 0)
355
- .attr("width", w1)
356
- .attr("height", height);
357
-
358
- // Update the measure rects.
359
- var measure = g.selectAll("rect.measure")
360
- .data(measurez);
361
-
362
- measure.enter().append("svg:rect")
363
- .attr("class", function(d, i) { return "measure s" + i; })
364
- .attr("width", w0)
365
- .attr("height", height / 3)
366
- .attr("x", reverse ? x0 : 0)
367
- .attr("y", height / 3)
368
- .transition()
369
- .duration(duration)
370
- .attr("width", w1)
371
- .attr("x", reverse ? x1 : 0);
372
-
373
- measure.transition()
374
- .duration(duration)
375
- .attr("width", w1)
376
- .attr("height", height / 3)
377
- .attr("x", reverse ? x1 : 0)
378
- .attr("y", height / 3);
379
-
380
- // Update the marker lines.
381
- var marker = g.selectAll("line.marker")
382
- .data(markerz);
383
-
384
- marker.enter().append("svg:line")
385
- .attr("class", "marker")
386
- .attr("x1", x0)
387
- .attr("x2", x0)
388
- .attr("y1", height / 6)
389
- .attr("y2", height * 5 / 6)
390
- .transition()
391
- .duration(duration)
392
- .attr("x1", x1)
393
- .attr("x2", x1);
394
-
395
- marker.transition()
396
- .duration(duration)
397
- .attr("x1", x1)
398
- .attr("x2", x1)
399
- .attr("y1", height / 6)
400
- .attr("y2", height * 5 / 6);
401
-
402
- // Compute the tick format.
403
- var format = tickFormat || x1.tickFormat(8);
404
-
405
- // Update the tick groups.
406
- var tick = g.selectAll("g.tick")
407
- .data(x1.ticks(8), function(d) {
408
- return this.textContent || format(d);
409
- });
410
-
411
- // Initialize the ticks with the old scale, x0.
412
- var tickEnter = tick.enter().append("svg:g")
413
- .attr("class", "tick")
414
- .attr("transform", d3_chart_bulletTranslate(x0))
415
- .style("opacity", 1e-6);
416
-
417
- tickEnter.append("svg:line")
418
- .attr("y1", height)
419
- .attr("y2", height * 7 / 6);
420
-
421
- tickEnter.append("svg:text")
422
- .attr("text-anchor", "middle")
423
- .attr("dy", "1em")
424
- .attr("y", height * 7 / 6)
425
- .text(format);
426
-
427
- // Transition the entering ticks to the new scale, x1.
428
- tickEnter.transition()
429
- .duration(duration)
430
- .attr("transform", d3_chart_bulletTranslate(x1))
431
- .style("opacity", 1);
432
-
433
- // Transition the updating ticks to the new scale, x1.
434
- var tickUpdate = tick.transition()
435
- .duration(duration)
436
- .attr("transform", d3_chart_bulletTranslate(x1))
437
- .style("opacity", 1);
438
-
439
- tickUpdate.select("line")
440
- .attr("y1", height)
441
- .attr("y2", height * 7 / 6);
442
-
443
- tickUpdate.select("text")
444
- .attr("y", height * 7 / 6);
445
-
446
- // Transition the exiting ticks to the new scale, x1.
447
- tick.exit().transition()
448
- .duration(duration)
449
- .attr("transform", d3_chart_bulletTranslate(x1))
450
- .style("opacity", 1e-6)
451
- .remove();
452
- });
453
- d3.timer.flush();
454
- }
455
-
456
- // left, right, top, bottom
457
- bullet.orient = function(x) {
458
- if (!arguments.length) return orient;
459
- orient = x;
460
- reverse = orient == "right" || orient == "bottom";
461
- return bullet;
462
- };
463
-
464
- // ranges (bad, satisfactory, good)
465
- bullet.ranges = function(x) {
466
- if (!arguments.length) return ranges;
467
- ranges = x;
468
- return bullet;
469
- };
470
-
471
- // markers (previous, goal)
472
- bullet.markers = function(x) {
473
- if (!arguments.length) return markers;
474
- markers = x;
475
- return bullet;
476
- };
477
-
478
- // measures (actual, forecast)
479
- bullet.measures = function(x) {
480
- if (!arguments.length) return measures;
481
- measures = x;
482
- return bullet;
483
- };
484
-
485
- bullet.width = function(x) {
486
- if (!arguments.length) return width;
487
- width = x;
488
- return bullet;
489
- };
490
-
491
- bullet.height = function(x) {
492
- if (!arguments.length) return height;
493
- height = x;
494
- return bullet;
495
- };
496
-
497
- bullet.tickFormat = function(x) {
498
- if (!arguments.length) return tickFormat;
499
- tickFormat = x;
500
- return bullet;
501
- };
502
-
503
- bullet.duration = function(x) {
504
- if (!arguments.length) return duration;
505
- duration = x;
506
- return bullet;
507
- };
508
-
509
- return bullet;
510
- };
511
-
512
- function d3_chart_bulletRanges(d) {
513
- return d.ranges;
514
- }
515
-
516
- function d3_chart_bulletMarkers(d) {
517
- return d.markers;
518
- }
519
-
520
- function d3_chart_bulletMeasures(d) {
521
- return d.measures;
522
- }
523
-
524
- function d3_chart_bulletTranslate(x) {
525
- return function(d) {
526
- return "translate(" + x(d) + ",0)";
527
- };
528
- }
529
-
530
- function d3_chart_bulletWidth(x) {
531
- var x0 = x(0);
532
- return function(d) {
533
- return Math.abs(x(d) - x0);
534
- };
535
- }
536
- // Implements a horizon layout, which is a variation of a single-series
537
- // area chart where the area is folded into multiple bands. Color is used to
538
- // encode band, allowing the size of the chart to be reduced significantly
539
- // without impeding readability. This layout algorithm is based on the work of
540
- // J. Heer, N. Kong and M. Agrawala in "Sizing the Horizon: The Effects of Chart
541
- // Size and Layering on the Graphical Perception of Time Series Visualizations",
542
- // CHI 2009. http://hci.stanford.edu/publications/2009/heer-horizon-chi09.pdf
543
- d3.chart.horizon = function() {
544
- var bands = 1, // between 1 and 5, typically
545
- mode = "offset", // or mirror
546
- interpolate = "linear", // or basis, monotone, step-before, etc.
547
- x = d3_chart_horizonX,
548
- y = d3_chart_horizonY,
549
- w = 960,
550
- h = 40,
551
- duration = 0;
552
-
553
- var color = d3.scale.linear()
554
- .domain([-1, 0, 1])
555
- .range(["#d62728", "#fff", "#1f77b4"]);
556
-
557
- // For each small multiple…
558
- function horizon(g) {
559
- g.each(function(d, i) {
560
- var g = d3.select(this),
561
- n = 2 * bands + 1,
562
- xMin = Infinity,
563
- xMax = -Infinity,
564
- yMax = -Infinity,
565
- x0, // old x-scale
566
- y0, // old y-scale
567
- id; // unique id for paths
568
-
569
- // Compute x- and y-values along with extents.
570
- var data = d.map(function(d, i) {
571
- var xv = x.call(this, d, i),
572
- yv = y.call(this, d, i);
573
- if (xv < xMin) xMin = xv;
574
- if (xv > xMax) xMax = xv;
575
- if (-yv > yMax) yMax = -yv;
576
- if (yv > yMax) yMax = yv;
577
- return [xv, yv];
578
- });
579
-
580
- // Compute the new x- and y-scales.
581
- var x1 = d3.scale.linear().domain([xMin, xMax]).range([0, w]),
582
- y1 = d3.scale.linear().domain([0, yMax]).range([0, h * bands]);
583
-
584
- // Retrieve the old scales, if this is an update.
585
- if (this.__chart__) {
586
- x0 = this.__chart__.x;
587
- y0 = this.__chart__.y;
588
- id = this.__chart__.id;
589
- } else {
590
- x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range());
591
- y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range());
592
- id = ++d3_chart_horizonId;
593
- }
594
-
595
- // We'll use a defs to store the area path and the clip path.
596
- var defs = g.selectAll("defs")
597
- .data([data]);
598
-
599
- var defsEnter = defs.enter().append("svg:defs");
600
-
601
- // The clip path is a simple rect.
602
- defsEnter.append("svg:clipPath")
603
- .attr("id", "d3_chart_horizon_clip" + id)
604
- .append("svg:rect")
605
- .attr("width", w)
606
- .attr("height", h);
607
-
608
- defs.select("rect").transition()
609
- .duration(duration)
610
- .attr("width", w)
611
- .attr("height", h);
612
-
613
- // The area path is rendered with our resuable d3.svg.area.
614
- defsEnter.append("svg:path")
615
- .attr("id", "d3_chart_horizon_path" + id)
616
- .attr("d", d3_chart_horizonArea
617
- .interpolate(interpolate)
618
- .x(function(d) { return x0(d[0]); })
619
- .y0(h * bands)
620
- .y1(function(d) { return h * bands - y0(d[1]); }))
621
- .transition()
622
- .duration(duration)
623
- .attr("d", d3_chart_horizonArea
624
- .x(function(d) { return x1(d[0]); })
625
- .y1(function(d) { return h * bands - y1(d[1]); }));
626
-
627
- defs.select("path").transition()
628
- .duration(duration)
629
- .attr("d", d3_chart_horizonArea);
630
-
631
- // We'll use a container to clip all horizon layers at once.
632
- g.selectAll("g")
633
- .data([null])
634
- .enter().append("svg:g")
635
- .attr("clip-path", "url(#d3_chart_horizon_clip" + id + ")");
636
-
637
- // Define the transform function based on the mode.
638
- var transform = mode == "offset"
639
- ? function(d) { return "translate(0," + (d + (d < 0) - bands) * h + ")"; }
640
- : function(d) { return (d < 0 ? "scale(1,-1)" : "") + "translate(0," + (d - bands) * h + ")"; };
641
-
642
- // Instantiate each copy of the path with different transforms.
643
- var u = g.select("g").selectAll("use")
644
- .data(d3.range(-1, -bands - 1, -1).concat(d3.range(1, bands + 1)), Number);
645
-
646
- // TODO don't fudge the enter transition
647
- u.enter().append("svg:use")
648
- .attr("xlink:href", "#d3_chart_horizon_path" + id)
649
- .attr("transform", function(d) { return transform(d + (d > 0 ? 1 : -1)); })
650
- .style("fill", color)
651
- .transition()
652
- .duration(duration)
653
- .attr("transform", transform);
654
-
655
- u.transition()
656
- .duration(duration)
657
- .attr("transform", transform)
658
- .style("fill", color);
659
-
660
- u.exit().transition()
661
- .duration(duration)
662
- .attr("transform", transform)
663
- .remove();
664
-
665
- // Stash the new scales.
666
- this.__chart__ = {x: x1, y: y1, id: id};
667
- });
668
- d3.timer.flush();
669
- }
670
-
671
- horizon.duration = function(x) {
672
- if (!arguments.length) return duration;
673
- duration = +x;
674
- return horizon;
675
- };
676
-
677
- horizon.bands = function(x) {
678
- if (!arguments.length) return bands;
679
- bands = +x;
680
- color.domain([-bands, 0, bands]);
681
- return horizon;
682
- };
683
-
684
- horizon.mode = function(x) {
685
- if (!arguments.length) return mode;
686
- mode = x + "";
687
- return horizon;
688
- };
689
-
690
- horizon.colors = function(x) {
691
- if (!arguments.length) return color.range();
692
- color.range(x);
693
- return horizon;
694
- };
695
-
696
- horizon.interpolate = function(x) {
697
- if (!arguments.length) return interpolate;
698
- interpolate = x + "";
699
- return horizon;
700
- };
701
-
702
- horizon.x = function(z) {
703
- if (!arguments.length) return x;
704
- x = z;
705
- return horizon;
706
- };
707
-
708
- horizon.y = function(z) {
709
- if (!arguments.length) return y;
710
- y = z;
711
- return horizon;
712
- };
713
-
714
- horizon.width = function(x) {
715
- if (!arguments.length) return w;
716
- w = +x;
717
- return horizon;
718
- };
719
-
720
- horizon.height = function(x) {
721
- if (!arguments.length) return h;
722
- h = +x;
723
- return horizon;
724
- };
725
-
726
- return horizon;
727
- };
728
-
729
- var d3_chart_horizonArea = d3.svg.area(),
730
- d3_chart_horizonId = 0;
731
-
732
- function d3_chart_horizonX(d) {
733
- return d[0];
734
- }
735
-
736
- function d3_chart_horizonY(d) {
737
- return d[1];
738
- }
739
- // Based on http://vis.stanford.edu/protovis/ex/qqplot.html
740
- d3.chart.qq = function() {
741
- var width = 1,
742
- height = 1,
743
- duration = 0,
744
- domain = null,
745
- tickFormat = null,
746
- n = 100,
747
- x = d3_chart_qqX,
748
- y = d3_chart_qqY;
749
-
750
- // For each small multiple…
751
- function qq(g) {
752
- g.each(function(d, i) {
753
- var g = d3.select(this),
754
- qx = d3_chart_qqQuantiles(n, x.call(this, d, i)),
755
- qy = d3_chart_qqQuantiles(n, y.call(this, d, i)),
756
- xd = domain && domain.call(this, d, i) || [d3.min(qx), d3.max(qx)], // new x-domain
757
- yd = domain && domain.call(this, d, i) || [d3.min(qy), d3.max(qy)], // new y-domain
758
- x0, // old x-scale
759
- y0; // old y-scale
760
-
761
- // Compute the new x-scale.
762
- var x1 = d3.scale.linear()
763
- .domain(xd)
764
- .range([0, width]);
765
-
766
- // Compute the new y-scale.
767
- var y1 = d3.scale.linear()
768
- .domain(yd)
769
- .range([height, 0]);
770
-
771
- // Retrieve the old scales, if this is an update.
772
- if (this.__chart__) {
773
- x0 = this.__chart__.x;
774
- y0 = this.__chart__.y;
775
- } else {
776
- x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range());
777
- y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range());
778
- }
779
-
780
- // Stash the new scales.
781
- this.__chart__ = {x: x1, y: y1};
782
-
783
- // Update diagonal line.
784
- var diagonal = g.selectAll("line.diagonal")
785
- .data([null]);
786
-
787
- diagonal.enter().append("svg:line")
788
- .attr("class", "diagonal")
789
- .attr("x1", x1(yd[0]))
790
- .attr("y1", y1(xd[0]))
791
- .attr("x2", x1(yd[1]))
792
- .attr("y2", y1(xd[1]));
793
-
794
- diagonal.transition()
795
- .duration(duration)
796
- .attr("x1", x1(yd[0]))
797
- .attr("y1", y1(xd[0]))
798
- .attr("x2", x1(yd[1]))
799
- .attr("y2", y1(xd[1]));
800
-
801
- // Update quantile plots.
802
- var circle = g.selectAll("circle")
803
- .data(d3.range(n).map(function(i) {
804
- return {x: qx[i], y: qy[i]};
805
- }));
806
-
807
- circle.enter().append("svg:circle")
808
- .attr("class", "quantile")
809
- .attr("r", 4.5)
810
- .attr("cx", function(d) { return x0(d.x); })
811
- .attr("cy", function(d) { return y0(d.y); })
812
- .style("opacity", 1e-6)
813
- .transition()
814
- .duration(duration)
815
- .attr("cx", function(d) { return x1(d.x); })
816
- .attr("cy", function(d) { return y1(d.y); })
817
- .style("opacity", 1);
818
-
819
- circle.transition()
820
- .duration(duration)
821
- .attr("cx", function(d) { return x1(d.x); })
822
- .attr("cy", function(d) { return y1(d.y); })
823
- .style("opacity", 1);
824
-
825
- circle.exit().transition()
826
- .duration(duration)
827
- .attr("cx", function(d) { return x1(d.x); })
828
- .attr("cy", function(d) { return y1(d.y); })
829
- .style("opacity", 1e-6)
830
- .remove();
831
-
832
- var xformat = tickFormat || x1.tickFormat(4),
833
- yformat = tickFormat || y1.tickFormat(4),
834
- tx = function(d) { return "translate(" + x1(d) + "," + height + ")"; },
835
- ty = function(d) { return "translate(0," + y1(d) + ")"; };
836
-
837
- // Update x-ticks.
838
- var xtick = g.selectAll("g.x.tick")
839
- .data(x1.ticks(4), function(d) {
840
- return this.textContent || xformat(d);
841
- });
842
-
843
- var xtickEnter = xtick.enter().append("svg:g")
844
- .attr("class", "x tick")
845
- .attr("transform", function(d) { return "translate(" + x0(d) + "," + height + ")"; })
846
- .style("opacity", 1e-6);
847
-
848
- xtickEnter.append("svg:line")
849
- .attr("y1", 0)
850
- .attr("y2", -6);
851
-
852
- xtickEnter.append("svg:text")
853
- .attr("text-anchor", "middle")
854
- .attr("dy", "1em")
855
- .text(xformat);
856
-
857
- // Transition the entering ticks to the new scale, x1.
858
- xtickEnter.transition()
859
- .duration(duration)
860
- .attr("transform", tx)
861
- .style("opacity", 1);
862
-
863
- // Transition the updating ticks to the new scale, x1.
864
- xtick.transition()
865
- .duration(duration)
866
- .attr("transform", tx)
867
- .style("opacity", 1);
868
-
869
- // Transition the exiting ticks to the new scale, x1.
870
- xtick.exit().transition()
871
- .duration(duration)
872
- .attr("transform", tx)
873
- .style("opacity", 1e-6)
874
- .remove();
875
-
876
- // Update ticks.
877
- var ytick = g.selectAll("g.y.tick")
878
- .data(y1.ticks(4), function(d) {
879
- return this.textContent || yformat(d);
880
- });
881
-
882
- var ytickEnter = ytick.enter().append("svg:g")
883
- .attr("class", "y tick")
884
- .attr("transform", function(d) { return "translate(0," + y0(d) + ")"; })
885
- .style("opacity", 1e-6);
886
-
887
- ytickEnter.append("svg:line")
888
- .attr("x1", 0)
889
- .attr("x2", 6);
890
-
891
- ytickEnter.append("svg:text")
892
- .attr("text-anchor", "end")
893
- .attr("dx", "-.5em")
894
- .attr("dy", ".3em")
895
- .text(yformat);
896
-
897
- // Transition the entering ticks to the new scale, y1.
898
- ytickEnter.transition()
899
- .duration(duration)
900
- .attr("transform", ty)
901
- .style("opacity", 1);
902
-
903
- // Transition the updating ticks to the new scale, y1.
904
- ytick.transition()
905
- .duration(duration)
906
- .attr("transform", ty)
907
- .style("opacity", 1);
908
-
909
- // Transition the exiting ticks to the new scale, y1.
910
- ytick.exit().transition()
911
- .duration(duration)
912
- .attr("transform", ty)
913
- .style("opacity", 1e-6)
914
- .remove();
915
- });
916
- }
917
-
918
- qq.width = function(x) {
919
- if (!arguments.length) return width;
920
- width = x;
921
- return qq;
922
- };
923
-
924
- qq.height = function(x) {
925
- if (!arguments.length) return height;
926
- height = x;
927
- return qq;
928
- };
929
-
930
- qq.duration = function(x) {
931
- if (!arguments.length) return duration;
932
- duration = x;
933
- return qq;
934
- };
935
-
936
- qq.domain = function(x) {
937
- if (!arguments.length) return domain;
938
- domain = x == null ? x : d3.functor(x);
939
- return qq;
940
- };
941
-
942
- qq.count = function(z) {
943
- if (!arguments.length) return n;
944
- n = z;
945
- return qq;
946
- };
947
-
948
- qq.x = function(z) {
949
- if (!arguments.length) return x;
950
- x = z;
951
- return qq;
952
- };
953
-
954
- qq.y = function(z) {
955
- if (!arguments.length) return y;
956
- y = z;
957
- return qq;
958
- };
959
-
960
- qq.tickFormat = function(x) {
961
- if (!arguments.length) return tickFormat;
962
- tickFormat = x;
963
- return qq;
964
- };
965
-
966
- return qq;
967
- };
968
-
969
- function d3_chart_qqQuantiles(n, values) {
970
- var m = values.length - 1;
971
- values = values.slice().sort(d3.ascending);
972
- return d3.range(n).map(function(i) {
973
- return values[~~(i * m / n)];
974
- });
975
- }
976
-
977
- function d3_chart_qqX(d) {
978
- return d.x;
979
- }
980
-
981
- function d3_chart_qqY(d) {
982
- return d.y;
983
- }
984
- })();