Compare commits

...

No commits in common. 'gh-pages' and 'master' have entirely different histories.

  1. 6
      .gitignore
  2. 22
      LICENSE
  3. 2
      README.md
  4. 68
      authors.html
  5. 0
      docs/archives.html
  6. 68
      docs/authors.html
  7. 0
      docs/breakdown/nest.css
  8. 38
      docs/breakdown/nest.html
  9. 0
      docs/breakdown/nest_modcontrol.js
  10. 0
      docs/breakdown/nest_sunburst.js
  11. 0
      docs/breakdown/nest_tree.json
  12. 0
      docs/breakdown/nestorthog.html
  13. 0
      docs/breakdown/orthog.css
  14. 40
      docs/breakdown/orthog.html
  15. 0
      docs/breakdown/orthog_modcontrol.js
  16. 0
      docs/breakdown/orthog_sunburst.js
  17. 0
      docs/breakdown/orthog_tree.json
  18. 0
      docs/bubbles/bubbles.css
  19. 161
      docs/bubbles/bubbles.html
  20. 72
      docs/bubbles/bubbles.json
  21. 516
      docs/bubbles/bubbles_chart.js
  22. 76
      docs/bubbles/bubbles_modcontrol.js
  23. 1
      docs/bubbles/icd10codes.json
  24. 0
      docs/categories.html
  25. 0
      docs/dynamic/pushpop.css
  26. 36
      docs/dynamic/pushpop.html
  27. 0
      docs/dynamic/pushpop.md
  28. 0
      docs/dynamic/pushpop_modcontrol.js
  29. 0
      docs/dynamic/pushpop_sunburst.js
  30. 0
      docs/dynamic/pushpop_tree.json
  31. 0
      docs/dynamic/slider.css
  32. 36
      docs/dynamic/slider.html
  33. 0
      docs/dynamic/slider.md
  34. 0
      docs/dynamic/slider_modcontrol.js
  35. 71
      docs/dynamic/slider_sunburst.js
  36. 0
      docs/dynamic/slider_tree.json
  37. 30
      docs/hello/index.html
  38. BIN
      docs/images/bardonut.png
  39. 0
      docs/images/bigrams2.png
  40. BIN
      docs/images/bubblechart.png
  41. BIN
      docs/images/donutpicker.png
  42. 0
      docs/images/interactive_pushpop.png
  43. 0
      docs/images/interactive_slider.png
  44. 0
      docs/images/nested.png
  45. 0
      docs/images/orthogonal.png
  46. 0
      docs/images/orthogonal_joint_distribution.png
  47. 0
      docs/images/orthogonal_kde.png
  48. 0
      docs/images/plain2.png
  49. BIN
      docs/images/radar1.png
  50. BIN
      docs/images/staticdonut.png
  51. 0
      docs/images/twohist.png
  52. 138
      docs/index.html
  53. 86
      docs/letters/bigrams.html
  54. 0
      docs/letters/bigrams.json
  55. 0
      docs/letters/bigrams2.css
  56. 86
      docs/letters/bigrams2.html
  57. 0
      docs/letters/bigrams2_modcontrol.js
  58. 0
      docs/letters/bigrams2_sunburst.js
  59. 0
      docs/letters/bigrams_modcontrol.js
  60. 0
      docs/letters/bigrams_sunburst.js
  61. 0
      docs/letters/letter_freq.json
  62. 84
      docs/letters/plain.html
  63. 0
      docs/letters/plain_modcontrol.js
  64. 0
      docs/letters/plain_sunburst.js
  65. 414
      docs/objects/bar-chart.js
  66. 38
      docs/objects/bar1.css
  67. 186
      docs/objects/bar1.html
  68. 72
      docs/objects/bar1.json
  69. 398
      docs/objects/bar1_chart.js
  70. 86
      docs/objects/bar1_modcontrol.js
  71. 1
      docs/objects/icd10codes.json
  72. 1
      docs/radar/icd10codes.json
  73. 0
      docs/radar/plusradar.css
  74. 69
      docs/radar/plusradar.html
  75. 16
      docs/radar/plusradar.json
  76. 127
      docs/radar/plusradar_chart.js
  77. 55
      docs/radar/plusradar_modcontrol.js
  78. 28
      docs/radar/plusradar_stupid.html
  79. 292
      docs/radar/radar-chart.js
  80. 81
      docs/radar/radar1.css
  81. 175
      docs/radar/radar1.html
  82. 16
      docs/radar/radar1.json
  83. 700
      docs/radar/radar1_chart.js
  84. 76
      docs/radar/radar1_modcontrol.js
  85. 81
      docs/radar/radar2.css
  86. 176
      docs/radar/radar2.html
  87. 16
      docs/radar/radar2.json
  88. 413
      docs/radar/radar2_chart.js
  89. 76
      docs/radar/radar2_modcontrol.js
  90. 72
      docs/radar/radar_mod.json
  91. 72
      docs/radar/radar_mon.json
  92. 38
      docs/simpledonut/bardonut.css
  93. 191
      docs/simpledonut/bardonut.html
  94. 16
      docs/simpledonut/bardonut.json
  95. 61
      docs/simpledonut/bardonut.md
  96. 16
      docs/simpledonut/bardonut_allcategories.json
  97. 732
      docs/simpledonut/bardonut_chart.js
  98. 87
      docs/simpledonut/bardonut_modcontrol.js
  99. 26
      docs/simpledonut/donutpicker.css
  100. 174
      docs/simpledonut/donutpicker.html
  101. Some files were not shown because too many files have changed in this diff Show More

6
.gitignore vendored

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
# Ignore pelican output directories
pelican/cache
pelican/output
# Python
*.pyc

22
LICENSE

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 Charles Reid
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

2
README.md

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
# dang-sunburst
Exploring D3 sunburst charts with D3 + Angular + Pelican.

68
authors.html

@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>dang-sunburst - Authors</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<hr />
<h1>Authors on dang-sunburst</h1>
<ul> </ul>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

0
archives.html → docs/archives.html

68
docs/authors.html

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>dang-sunburst - Authors</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<h1>Authors on dang-sunburst</h1>
<ul> </ul>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

0
breakdown/nest.css → docs/breakdown/nest.css

38
breakdown/nest.html → docs/breakdown/nest.html

@ -7,26 +7,27 @@ @@ -7,26 +7,27 @@
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/dang-sunburst/breakdown/nest.css" rel="stylesheet" stype="text/css" />
<link href="/breakdown/nest.css" rel="stylesheet" stype="text/css" />
<div ng-app="nestApp">
@ -62,7 +63,7 @@ Each of the blue bars represents a partition in the inner radian, or ring, @@ -62,7 +63,7 @@ Each of the blue bars represents a partition in the inner radian, or ring,
while each of the green bars represents a partition in the outer radian, or ring.
<br />
<img src="/dang-sunburst/images/twohist.png" />
<img src="/images/twohist.png" />
<br />
The Python code used to generate these samples is given below.
@ -164,8 +165,8 @@ determine the size of the arcs. @@ -164,8 +165,8 @@ determine the size of the arcs.
</div>
<script type="text/javascript" src="/dang-sunburst/breakdown/nest_modcontrol.js"></script>
<script type="text/javascript" src="/dang-sunburst/breakdown/nest_sunburst.js"></script>
<script type="text/javascript" src="/breakdown/nest_modcontrol.js"></script>
<script type="text/javascript" src="/breakdown/nest_sunburst.js"></script>
</div>
@ -188,18 +189,17 @@ determine the size of the arcs. @@ -188,18 +189,17 @@ determine the size of the arcs.
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->

0
breakdown/nest_modcontrol.js → docs/breakdown/nest_modcontrol.js

0
breakdown/nest_sunburst.js → docs/breakdown/nest_sunburst.js

0
breakdown/nest_tree.json → docs/breakdown/nest_tree.json

0
breakdown/nestorthog.html → docs/breakdown/nestorthog.html

0
breakdown/orthog.css → docs/breakdown/orthog.css

40
breakdown/orthog.html → docs/breakdown/orthog.html

@ -7,26 +7,27 @@ @@ -7,26 +7,27 @@
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/dang-sunburst/breakdown/orthog.css" rel="stylesheet" stype="text/css" />
<link href="/breakdown/orthog.css" rel="stylesheet" stype="text/css" />
<div ng-app="orthogonalApp">
@ -99,7 +100,7 @@ ax.set_ylabel('Y') @@ -99,7 +100,7 @@ ax.set_ylabel('Y')
which results in the joint distribution shown in the plot below:
<br />
<img src="/dang-sunburst/images/orthogonal_kde.png" />
<img src="/images/orthogonal_kde.png" />
<br />
Next, we map the bins of each dimension, X and Y, to a set of variables.
@ -108,7 +109,7 @@ This is easily done with some code calling the Numpy <code>histogram2d</code> fu @@ -108,7 +109,7 @@ This is easily done with some code calling the Numpy <code>histogram2d</code> fu
This results in a binned, 10x10 grid:
<br />
<img src="/dang-sunburst/images/orthogonal_joint_distribution.png" />
<img src="/images/orthogonal_joint_distribution.png" />
<br />
This data is displayed in the sunburst chart, with the x dimension represented in the
@ -147,8 +148,8 @@ returned by <code>np.histogram2d</code>. @@ -147,8 +148,8 @@ returned by <code>np.histogram2d</code>.
</div>
<script type="text/javascript" src="/dang-sunburst/breakdown/orthog_modcontrol.js"></script>
<script type="text/javascript" src="/dang-sunburst/breakdown/orthog_sunburst.js"></script>
<script type="text/javascript" src="/breakdown/orthog_modcontrol.js"></script>
<script type="text/javascript" src="/breakdown/orthog_sunburst.js"></script>
</div>
@ -171,18 +172,17 @@ returned by <code>np.histogram2d</code>. @@ -171,18 +172,17 @@ returned by <code>np.histogram2d</code>.
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->

0
breakdown/orthog_modcontrol.js → docs/breakdown/orthog_modcontrol.js

0
breakdown/orthog_sunburst.js → docs/breakdown/orthog_sunburst.js

0
breakdown/orthog_tree.json → docs/breakdown/orthog_tree.json

0
categories.html → docs/bubbles/bubbles.css

161
docs/bubbles/bubbles.html

@ -0,0 +1,161 @@ @@ -0,0 +1,161 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>bubbles Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/bubbles/bubbles.css" rel="stylesheet" stype="text/css" />
<div ng-app="bubblesApp">
<div ng-controller="bubblesController" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="bubbles_title">
<bubbleshead></bubbleshead>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="bubbles_controls">
<bubblescontrols></bubblescontrols>
</div>
</div>
<div class="row">
<div class="col-sm-6" id="bubbles_charts">
<div class="row" id="bubbles_chart">
<bubbleschart></bubbleschart>
</div>
</div>
<div class="col-sm-6" id="bubbles_panels">
<div class="row" id="bubbles_panel">
<bubblespanel></bubblespanel>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="bubbles_text">
<div class="row" id="bubbles_md">
Bubble chart.
<br />
<br />
<pre style="font-size: 8px;">
[
{ "className": "S324",
"axes": [
{"value": 1, "axis": "January"},
{"value": 0, "axis": "February"},
...
{"value": 0, "axis": "December"}
]
},
{ "className": "S328",
"axes": [
{"value": 1, "axis": "January"},
{"value": 1, "axis": "February"},
...
{"value": 2, "axis": "December"}
]
},
{ "className": "Y15",
"axes": [
{"value": 3, "axis": "January"},
{"value": 2, "axis": "February"},
...
{"value": 1, "axis": "December"}
]
}
]
</pre>
</div>
</div>
</div>
</div>
</div>
<script src="http://d3js.org/d3.v3.js"></script>
<script type="text/javascript" src="/bubbles/bubbles_modcontrol.js"></script>
<script type="text/javascript" src="/bubbles/bubbles_chart.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

72
docs/bubbles/bubbles.json

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
[{"labels": "S324", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "S328", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 2, "label": "June"}, {"value": 2, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "Y15", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "Y14", "values": [{"value": 2, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I120", "values": [{"value": 2, "label": "January"}, {"value": 2, "label": "February"}, {"value": 2, "label": "March"}, {"value": 2, "label": "April"}, {"value": 2, "label": "May"}, {"value": 1, "label": "June"}, {"value": 6, "label": "July"}, {"value": 2, "label": "August"}, {"value": 1, "label": "September"}, {"value": 3, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I129", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "A051", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "W19", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 2, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T465", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C449", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C119", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C444", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T519", "values": [{"value": 1, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 1, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T510", "values": [{"value": 3, "label": "January"}, {"value": 1, "label": "February"}, {"value": 6, "label": "March"}, {"value": 5, "label": "April"}, {"value": 5, "label": "May"}, {"value": 6, "label": "June"}, {"value": 6, "label": "July"}, {"value": 1, "label": "August"}, {"value": 8, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T511", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "K117", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "W18", "values": [{"value": 2, "label": "January"}, {"value": 1, "label": "February"}, {"value": 1, "label": "March"}, {"value": 2, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 2, "label": "September"}, {"value": 2, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C781", "values": [{"value": 0, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I38", "values": [{"value": 3, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 2, "label": "April"}, {"value": 2, "label": "May"}, {"value": 3, "label": "June"}, {"value": 3, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 2, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "M109", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 2, "label": "June"}, {"value": 1, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "G610", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J159", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J150", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J151", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J152", "values": [{"value": 1, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 2, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C259", "values": [{"value": 4, "label": "January"}, {"value": 4, "label": "February"}, {"value": 4, "label": "March"}, {"value": 3, "label": "April"}, {"value": 2, "label": "May"}, {"value": 5, "label": "June"}, {"value": 6, "label": "July"}, {"value": 7, "label": "August"}, {"value": 6, "label": "September"}, {"value": 5, "label": "October"}, {"value": 3, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I829", "values": [{"value": 0, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T983", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "R402", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C254", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "F059", "values": [{"value": 0, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "F051", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C341", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "K909", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J90", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 2, "label": "April"}, {"value": 2, "label": "May"}, {"value": 1, "label": "June"}, {"value": 2, "label": "July"}, {"value": 0, "label": "August"}, {"value": 2, "label": "September"}, {"value": 2, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T443", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J969", "values": [{"value": 11, "label": "January"}, {"value": 10, "label": "February"}, {"value": 13, "label": "March"}, {"value": 13, "label": "April"}, {"value": 17, "label": "May"}, {"value": 13, "label": "June"}, {"value": 16, "label": "July"}, {"value": 21, "label": "August"}, {"value": 11, "label": "September"}, {"value": 12, "label": "October"}, {"value": 4, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J961", "values": [{"value": 4, "label": "January"}, {"value": 3, "label": "February"}, {"value": 4, "label": "March"}, {"value": 1, "label": "April"}, {"value": 3, "label": "May"}, {"value": 4, "label": "June"}, {"value": 2, "label": "July"}, {"value": 0, "label": "August"}, {"value": 4, "label": "September"}, {"value": 3, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "J960", "values": [{"value": 5, "label": "January"}, {"value": 2, "label": "February"}, {"value": 8, "label": "March"}, {"value": 6, "label": "April"}, {"value": 5, "label": "May"}, {"value": 4, "label": "June"}, {"value": 7, "label": "July"}, {"value": 2, "label": "August"}, {"value": 9, "label": "September"}, {"value": 6, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "V439", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "K137", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "S061", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "S060", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "R090", "values": [{"value": 2, "label": "January"}, {"value": 2, "label": "February"}, {"value": 5, "label": "March"}, {"value": 2, "label": "April"}, {"value": 2, "label": "May"}, {"value": 0, "label": "June"}, {"value": 3, "label": "July"}, {"value": 4, "label": "August"}, {"value": 4, "label": "September"}, {"value": 3, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "R092", "values": [{"value": 6, "label": "January"}, {"value": 5, "label": "February"}, {"value": 7, "label": "March"}, {"value": 1, "label": "April"}, {"value": 5, "label": "May"}, {"value": 2, "label": "June"}, {"value": 8, "label": "July"}, {"value": 5, "label": "August"}, {"value": 4, "label": "September"}, {"value": 4, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "R098", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 2, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "S066", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 1, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 1, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "S065", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 3, "label": "April"}, {"value": 2, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 3, "label": "September"}, {"value": 2, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "T794", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I698", "values": [{"value": 2, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 1, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 3, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I694", "values": [{"value": 4, "label": "January"}, {"value": 1, "label": "February"}, {"value": 3, "label": "March"}, {"value": 1, "label": "April"}, {"value": 2, "label": "May"}, {"value": 0, "label": "June"}, {"value": 2, "label": "July"}, {"value": 2, "label": "August"}, {"value": 0, "label": "September"}, {"value": 2, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I690", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "D693", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "D695", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "D696", "values": [{"value": 0, "label": "January"}, {"value": 2, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "D699", "values": [{"value": 0, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "K739", "values": [{"value": 0, "label": "January"}, {"value": 2, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "X78", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 1, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "X74", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 2, "label": "May"}, {"value": 4, "label": "June"}, {"value": 8, "label": "July"}, {"value": 7, "label": "August"}, {"value": 6, "label": "September"}, {"value": 7, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "I10", "values": [{"value": 33, "label": "January"}, {"value": 17, "label": "February"}, {"value": 32, "label": "March"}, {"value": 22, "label": "April"}, {"value": 22, "label": "May"}, {"value": 24, "label": "June"}, {"value": 22, "label": "July"}, {"value": 30, "label": "August"}, {"value": 20, "label": "September"}, {"value": 18, "label": "October"}, {"value": 8, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C099", "values": [{"value": 0, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "P236", "values": [{"value": 1, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "K922", "values": [{"value": 8, "label": "January"}, {"value": 5, "label": "February"}, {"value": 5, "label": "March"}, {"value": 5, "label": "April"}, {"value": 10, "label": "May"}, {"value": 7, "label": "June"}, {"value": 5, "label": "July"}, {"value": 5, "label": "August"}, {"value": 7, "label": "September"}, {"value": 8, "label": "October"}, {"value": 1, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "K920", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 1, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "Q938", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 1, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "D487", "values": [{"value": 0, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 2, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "Q200", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 1, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C151", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "C159", "values": [{"value": 7, "label": "January"}, {"value": 1, "label": "February"}, {"value": 0, "label": "March"}, {"value": 1, "label": "April"}, {"value": 5, "label": "May"}, {"value": 2, "label": "June"}, {"value": 3, "label": "July"}, {"value": 0, "label": "August"}, {"value": 2, "label": "September"}, {"value": 4, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "X94", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 1, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "V224", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 0, "label": "March"}, {"value": 0, "label": "April"}, {"value": 1, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 0, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]},
{"labels": "G409", "values": [{"value": 0, "label": "January"}, {"value": 0, "label": "February"}, {"value": 1, "label": "March"}, {"value": 0, "label": "April"}, {"value": 0, "label": "May"}, {"value": 0, "label": "June"}, {"value": 0, "label": "July"}, {"value": 0, "label": "August"}, {"value": 1, "label": "September"}, {"value": 0, "label": "October"}, {"value": 0, "label": "November"}, {"value": 0, "label": "December"}]}]

516
docs/bubbles/bubbles_chart.js

@ -0,0 +1,516 @@ @@ -0,0 +1,516 @@
var ng;
dir = [];
//////////////////////////////////////
// Chart Directives
//
// This file defines Angular directives
// that use D3 to draw charts.
//
///////////////////////////////////////
// Header Directives:
//
// Print out instructions, title, etc.
ng = a.directive('bubbleshead', function($compile) {
function link(scope, element, attr) {
var el = element[0];
$(el).empty();
var dir = $("div#bubbles_title");
var h1 = $("<h1 />");
var b = $("<b />")
.text("bubble chart example")
.appendTo(h1);
h1.appendTo(dir);
var p = $("<p />", {
"class" : "normal" })
.html("A fancy little bubble chart.")
.appendTo(dir);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
///////////////////////////////////////////////
// Chart Controls Directives
ng = a.directive('bubblescontrols', function($compile) {
function link(scope, element, attr) {
// wait to build the buttons until we've loaded the data,
// since the buttons come from the data.
scope.$parent.$watch('bubblesdata',doStuff);
function doStuff() {
if(!scope.$parent.bubblesdata) { return; }
buildButtons(element, scope.$parent);
}
};
function buildButtons(element,pscope) {
var mydiv = "div#bubbles_controls";
var el = $(mydiv);
var div = $("<div />");
// ------------------------------------
// Add ICD 10 code buttons
//
var btn_grp = $("<div />", {
"id" : "codebtns",
"class" : "btn-group"
});
for( var i = 0; i < pscope.bubblesdata.length; i++ ) {
var this_code = pscope.bubblesdata[i]['labels']
var code = $("<a />", {
"class" : "btn btn-code btn-large btn-primary",
"changecode" : "",
"id" : "btn_"+this_code,
"code" : this_code,
})
.html( this_code )
.appendTo(btn_grp);
}
// to make buttons in this btn group active,
// you have to use D3's classed() method
// after you add the elements to the document
// (i.e., after you call $compile)
angular.element(el).append($compile(btn_grp)(pscope));
pscope.updateCode = function() {
// -----------------------------
// make button for active icd 10 code
d3.selectAll("a.btn-code").classed('active',false);
var btnlabel = "a#btn_"+pscope.icd10code;
d3.selectAll(btnlabel).classed('active',true);
};
pscope.$watch('icd10code',pscope.updateCode);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
//////////////////////////////////
// Action directive:
// What to do when the user changes the ICD 10 code
// by clicking an ICD 10 code button
ng = a.directive("changecode", function($compile) {
return function(pscope, element, attrs){
element.bind("click", function(){
// first, update the scope variable
// that holds the current icd 10 code
// (no need to load any new data)
// This is the ICD 10 code the user has selected.
var this_code = attrs['code'];
var this_description = pscope.icd10codes_all[this_code]
//console.log('Changed icd 10 code, updating description:');
//console.log(this_code);
//console.log(this_description);
// !!!!!!!!!!!!!!!!!!!!!!!!
// NOTE
// The lines below - this $apply() method -
// this is the way you change the variable
// at the controller level, and get the
// various watchers to detect changes.
// !!!!!!!!!!!!!!!!!!!!!!!!!!
pscope.$apply(function() {
pscope.icd10code = this_code;
});
pscope.$apply(function() {
pscope.description = this_description;
});
//// This is some weak-sauce,
//// its not even changing value of variable
//pscope.update_icd10code(attrs['code']);
//// ...
//// .......
//// seriously.
//// all we needed was just
//// pscope.$apply()
////
//// smh.
//// then run the donut chart update function
//pscope.updatebubbles();
// then run the button controllers update function
pscope.updateCode();
});
}
});
///////////////////////////////////////////////
// Panels:
// Display useful information in a pretty box
ng = a.directive('bubblespanel', function($compile) {
function link(scope, element, attr) {
var el = element[0];
var pscope = scope.$parent;
// --------------------------
// add display for details
// assemble the tags,
// then compile the html
// select element of interest with angular.element
// and append the compiled tags
//
var br = $("<br />").appendTo(el);
var panel = $("<div />", {
"class" : "panel panel-primary",
"id" : "first"
});
var panelhead = $("<div />", {
"class" : "panel-heading"
}).appendTo(panel);
var h3 = $("<h3 />", {
"class" : "panel-title"
}).text("Current ICD 10 Code")
.appendTo(panelhead);
var panelbody = $("<div />", {
"class" : "panel-body"
}).appendTo(panel);
var maindiv = $("<div />", {
}).appendTo(panelbody);
var h = $("<h3 />")
.html("ICD 10 Code: [[icd10code]]")
.appendTo(maindiv);
var de = $("<p />", {
"class" : "lead" })
.html("Description: [[description]]")
.appendTo(maindiv);
angular.element(el).prepend($compile(panel)(pscope));
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
///////////////////////////////////////////////
// bubbles Chart
//
// This is the actual donut chart, of gender ratios.
ng = a.directive('bubbleschart', function($compile) {
function link(scope, element, attr) {
scope.$parent.$watch('bubblesdata',doStuff);
function doStuff() {
if(!scope.$parent.bubblesdata) { return; }
buildbubbles(element, scope.$parent);
}
};
function buildbubbles(element,pscope) {
var mydiv = "div#bubbles_chart";
var diameter = 500, //max size of the bubbles
color = d3.scale.category20b(); //color category
var bubble = d3.layout.pack()
.sort(null)
.size([diameter, diameter])
.padding(1.5);
var svg = d3.select(mydiv).append("svg")
.attr("width", diameter)
.attr("height", diameter)
.attr("class", "bubble");
pscope.updatebubbles = function() {
console.log('update bubbles');
var all_data = pscope.bubblesdata;
// ----------------------------------
// Get pie chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
var code;
var data;
for( var i=0; i < all_data.length; i++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[i]['labels'] == pscope.icd10code) {
code = all_data[i]['labels'];
data = all_data[i]['values'];
break;
}
}
// finished; use data
// ---------------------------------
svg.selectAll("circle").remove()
svg.selectAll(".bubblelabels").remove()
/////////////////////////////////////////
// Create chart
//
//
//bubbles needs very specific format, convert data to this.
var nodes = bubble.nodes({children:data}).filter(function(d) { return !d.children; });
var g = svg.selectAll("circle")
.data(nodes, function(d) {
return d.label;
})
.enter();
g.append("circle")
.attr("r", function(d) {
return +d.value*10;
})
.attr("cx", function(d){ return d.x; })
.attr("cy", function(d){ return d.y; })
.attr("class","node")
.style("fill", function(d) { return color(d.label); });
g.append("text")
.text(function(d){
if( +d.value > 0 ) {
return d.label;
}
})
.attr("class","bubblelabels")
.attr("x", function(d){ return d.x; })
.attr("y", function(d){ return d.y; })
/*
//format the text for each bubble
circles.append("text")
//.attr("x", function(d){ return d.x; })
//.attr("y", function(d){ return d.y; })
.attr("text-anchor", "middle")
.text(function(d){
console.log(d.label);
return d.label; })
.style({
"color" : "red",
"font-family":"Helvetica Neue, Helvetica, Arial, san-serif",
"font-size": "12px"
});
*/
}
pscope.$watch('icd10code',pscope.updatebubbles);
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
// BubbleChart = function(){
//
// var diameter;
//
// /**
// * Create a bubble chart
// *
// * @param {data} array of objects with name/value keys
// * @param {elm} string the element which to put this chart
// * @param {size} object with width/height keys
// * @param {pallet} array | undefined of hex codes for the bubble colors
// */
// this.createChart = function(data, elm, size, pallet) {
//
// pallet = pallet || ["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"];
// var domain = [],
// sorted = [];
//
// data = data.sort(function(a, b){ return b.value - a.value});
//
//
// for(var i=0; i<data.length; ++i){
// domain.push(data[i].value);
// }
//
// var diameter = Math.min(size.width, size.height),
// color = d3.scale.ordinal().domain(domain).range(pallet);
//
// var bubble = d3.layout.pack()
// .sort(null)
// .size([size.width, size.height])
// .padding(1.5);
//
// var svg = d3.select(elm).append("svg")
// .attr("width", size.width)
// .attr("height", size.height)
// .attr("class", "bubble");
//
// nodes = bubble.nodes({children:data}).filter(function(d) { return !d.children; });
//
// var circles = svg.selectAll("circle")
// .data(nodes, function(d){return d.name;})
// .enter()
// .append("circle")
// .attr("r", 0)
// .style("fill", function(d) { console.log(d); return color(d.value); })
// .attr("cx", function(d){ return d.x;})
// .attr("cy", function(d){ return d.y;})
// .attr("class", "node");
//
// circles.transition()
// .duration(1000)
// .attr("r", function(d) { return d.r; })
// .each('end', function(){ display_text();});
//
// function display_text() {
// var text = svg
// .selectAll(".text")
// .data(nodes, function(d){return d.name;});
//
// text.enter().append("text")
// .attr("class", "text")
// .style("font-size", "10px")
// .attr("x", function(d) { return d.x; })
// .attr("y", function(d) { return d.y; })
// .attr("dy", ".3em")
// .attr("text-anchor", "middle")
// .text(function(d) { return d.name.substring(0, d.r / 3); });
// }
//
// function hide_text() {
// var text = svg.selectAll(".text").remove();
// }
//
// this.changeData = function(newData){
// hide_text();
// nodes = bubble.nodes({children:newData}).filter(function(d) { return !d.children; });
// circles = circles.data(nodes);
// circles.transition().duration(1000)
// .attr("r", function(d){ return d.r;})
// .attr("cx", function(d){ return d.x;})
// .attr("cy", function(d){ return d.y;})
// .each('end', function(){ display_text();});
// }
// }
//
// d3.select(self.frameElement).style("height", diameter + "px");
//
// return this;
// };
//
//
// */

76
docs/bubbles/bubbles_modcontrol.js

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
///////////////////////////////////////
//
// bubbles
//
// Module/Controller
//
var a = angular.module("bubblesApp", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var datafactory = a.factory('datafactory', function($http, $q) {
return {
getbubblesdata: function() {
var deferred = $q.defer();
var json_file = 'bubbles.json';
$http.get(json_file).success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading json file: '+json_file);
deferred.reject();
});
return deferred.promise;
},
getCodeData: function() {
var deferred = $q.defer();
$http.get('icd10codes.json').success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading icd10codes.json');
deferred.reject();
});
return deferred.promise;
}
}
});
function bubblesController($scope,datafactory) {
$scope.initialize = function() {
$scope.icd10code="S324";
$scope.donutFemale = 0;
$scope.donutMale = 0;
datafactory.getbubblesdata().then(
function(data) {
$scope.bubblesdata = data;
}
);
datafactory.getCodeData().then(
function(data) {
$scope.icd10codes_all = data;
var descr = $scope.icd10codes_all[$scope.icd10code];
$scope.description = descr;
}
);
}
}
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to controller
var c = a.controller("bubblesController", ["$scope", "datafactory", bubblesController]);

1
docs/bubbles/icd10codes.json

File diff suppressed because one or more lines are too long

0
tags.html → docs/categories.html

0
dynamic/pushpop.css → docs/dynamic/pushpop.css

36
dynamic/pushpop.html → docs/dynamic/pushpop.html

@ -7,26 +7,27 @@ @@ -7,26 +7,27 @@
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/dang-sunburst/dynamic/pushpop.css" rel="stylesheet" stype="text/css" />
<link href="/dynamic/pushpop.css" rel="stylesheet" stype="text/css" />
<div ng-app="pushpopApp">
@ -110,8 +111,8 @@ by D3. Clicking push adds a new node to "root". @@ -110,8 +111,8 @@ by D3. Clicking push adds a new node to "root".
</div>
<script type="text/javascript" src="/dang-sunburst/dynamic/pushpop_modcontrol.js"></script>
<script type="text/javascript" src="/dang-sunburst/dynamic/pushpop_sunburst.js"></script>
<script type="text/javascript" src="/dynamic/pushpop_modcontrol.js"></script>
<script type="text/javascript" src="/dynamic/pushpop_sunburst.js"></script>
</div>
@ -134,18 +135,17 @@ by D3. Clicking push adds a new node to "root". @@ -134,18 +135,17 @@ by D3. Clicking push adds a new node to "root".
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->

0
dynamic/pushpop.md → docs/dynamic/pushpop.md

0
dynamic/pushpop_modcontrol.js → docs/dynamic/pushpop_modcontrol.js

0
dynamic/pushpop_sunburst.js → docs/dynamic/pushpop_sunburst.js

0
dynamic/pushpop_tree.json → docs/dynamic/pushpop_tree.json

0
dynamic/slider.css → docs/dynamic/slider.css

36
dynamic/slider.html → docs/dynamic/slider.html

@ -7,26 +7,27 @@ @@ -7,26 +7,27 @@
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/dang-sunburst/dynamic/slider.css" rel="stylesheet" stype="text/css" />
<link href="/dynamic/slider.css" rel="stylesheet" stype="text/css" />
<div ng-app="sliderApp">
@ -116,8 +117,8 @@ updated. @@ -116,8 +117,8 @@ updated.
</div>
<script type="text/javascript" src="/dang-sunburst/dynamic/slider_modcontrol.js"></script>
<script type="text/javascript" src="/dang-sunburst/dynamic/slider_sunburst.js"></script>
<script type="text/javascript" src="/dynamic/slider_modcontrol.js"></script>
<script type="text/javascript" src="/dynamic/slider_sunburst.js"></script>
</div>
@ -140,18 +141,17 @@ updated. @@ -140,18 +141,17 @@ updated.
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->

0
dynamic/slider.md → docs/dynamic/slider.md

0
dynamic/slider_modcontrol.js → docs/dynamic/slider_modcontrol.js

71
dynamic/slider_sunburst.js → docs/dynamic/slider_sunburst.js

@ -304,8 +304,8 @@ ng = a.directive('sliderSunburstChart', function($compile) { @@ -304,8 +304,8 @@ ng = a.directive('sliderSunburstChart', function($compile) {
left: 40
};
var width = 400 - margin.right - margin.left,
height = 400 - margin.top - margin.bottom;
var width = 600 - margin.right - margin.left,
height = 600 - margin.top - margin.bottom;
var radius = Math.min(width, height) / 2;
@ -398,45 +398,90 @@ ng = a.directive('sliderSunburstChart', function($compile) { @@ -398,45 +398,90 @@ ng = a.directive('sliderSunburstChart', function($compile) {
}
}
////////////////////////////////
//
// Very important: update charts
// if you build it,
// you must update it.
updateChart();
// chart will be built/updated if user updates data.
// chart will be updated if user clicks on a point.
// chart will be built/updated if user clicks a point.
pscope.$watch('clickedPoint',function(){
if(!pscope.clickedPoint) { return };
console.log('clickedPoint changed');
console.log('calling updateChart() bc clickedPoint changed');
updateChart();
});
// chart will be built/updated if user updates data.
pscope.$watch('clickedPoint.magnitude',function(){
if(!pscope.clickedPoint) { return };
console.log('clickedPoint.magnitude changed');
console.log('calling updateChart() bc clickedPoint.magnitude changed');
pscope.clickedPoint.value = +pscope.clickedPoint.magnitude;
updateChart();
});
// watch for bin by count/bin by value
pscope.$watch('countval_current', function() {
updateChart();
});
// uuuuuuuuuggggggggggghhhhhhhhhhhh
// now these get called twice
// each time the user picks a slice.
// you really can't have everything...
function updateChart() {
console.log('in updateChart()');
//////////////////////////////
// deal with the slider first:
// show it if user has clicked an
// outer slice of the sunburst,
// don't show it otherwise
//
// if we are on an outer slice,
// show the slider.
// if we are on an inner slice,
// don't show the slider.
//
// this would be eaiser if we
// pre-processed the data
// and set aside a list of
// "inner ring" names and
// "outer ring" names
//
d3.select("input#TheSlider").style("visibility",function(z) {
if(pscope.clickedPoint) {
if(!(pscope.clickedPoint.name in ['A','B','C','D','E'])) {
return "visible";
} else {
return "hidden";
var inner_ring_names = ["A","B","C","D","E"];
for( var cc = 0; cc < inner_ring_names.length; cc++ ) {
if( pscope.clickedPoint.name==inner_ring_names[cc] ) {
return "hidden";
}
}
// if we make it to this point,
// we are in the outer ring.
return "visible";
} else {
// user has not clicked anything yet.
return "hidden";
}
});

0
dynamic/slider_tree.json → docs/dynamic/slider_tree.json

30
hello/index.html → docs/hello/index.html

@ -7,22 +7,23 @@ @@ -7,22 +7,23 @@
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
@ -85,18 +86,17 @@ @@ -85,18 +86,17 @@
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->

BIN
docs/images/bardonut.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

0
images/bigrams2.png → docs/images/bigrams2.png

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

BIN
docs/images/bubblechart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
docs/images/donutpicker.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

0
images/interactive_pushpop.png → docs/images/interactive_pushpop.png

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

0
images/interactive_slider.png → docs/images/interactive_slider.png

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

0
images/nested.png → docs/images/nested.png

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

0
images/orthogonal.png → docs/images/orthogonal.png

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

0
images/orthogonal_joint_distribution.png → docs/images/orthogonal_joint_distribution.png

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

0
images/orthogonal_kde.png → docs/images/orthogonal_kde.png

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

0
images/plain2.png → docs/images/plain2.png

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

BIN
docs/images/radar1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
docs/images/staticdonut.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

0
images/twohist.png → docs/images/twohist.png

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

138
index.html → docs/index.html

@ -7,22 +7,23 @@ @@ -7,22 +7,23 @@
<!--
my CSS styles
-->
<link href="/dang-sunburst/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/dang-sunburst/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/dang-sunburst/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/dang-sunburst/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/dang-sunburst/">dang-sunburst <strong></strong></a></h1>
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
@ -70,7 +71,7 @@ to build charts. Here are some examples.</p> @@ -70,7 +71,7 @@ to build charts. Here are some examples.</p>
<p class="lead">This D3 sunburst chart shows two-level information about bi-gram frequencies (that is, the frequencies of
occurrences of two letter combinations in the English language):</p>
<img src="/dang-sunburst/images/bigrams2.png" class="index_img img-responsive" />
<img src="/images/bigrams2.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="letters/bigrams2.html">Interactive Sunburst: English Language Bi-Gram Frequencies</a></p>
@ -86,14 +87,14 @@ occurrences of two letter combinations in the English language):</p> @@ -86,14 +87,14 @@ occurrences of two letter combinations in the English language):</p>
<p class="lead"><b>Orthogonal Dimensions</b> - The first way is by displaying different, orthogonal dimensions on different
radians, or radial rings. Ring 1 contains x, Ring 2 contains y, etc.:</p>
<img src="/dang-sunburst/images/orthogonal.png" class="index_img img-responsive" />
<img src="/images/orthogonal.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="breakdown/orthog.html">Sunburst of Orthogonal Dimensions</a></p>
<p>&nbsp;</p>
<p class="lead"><b>Nested Dimensions</b> - Another method is using radians to display nested information. In this case, radians
display increasing levels of detail about the same dimension. Ring 1 contains x broken down into
10 groups, Ring 2 contains x broken down into 100 groups, etc.:</p>
<img src="/dang-sunburst/images/nested.png" class="index_img img-responsive" />
<img src="/images/nested.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="breakdown/nest.html">Sunburst of Nested Dimensions</a></p>
<p>&nbsp;</p>
@ -106,17 +107,20 @@ display increasing levels of detail about the same dimension. Ring 1 contains x @@ -106,17 +107,20 @@ display increasing levels of detail about the same dimension. Ring 1 contains x
<h2><b>Dynamic Sunburst Charts</b></h2>
<p class="lead">A picture is worth a thousand words, but an interactive chart is worth a bazillion.</p>
<p class="lead"><b>Sliders</b> - Allows the user to select parts of the chart and change their value and size.
</p>
<img src="/dang-sunburst/images/interactive_slider.png" class="index_img img-responsive" />
<img src="/images/interactive_slider.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="dynamic/slider.html">Sliders: Dynamic Sunburst</a></p>
<p>&nbsp;</p>
<p class="lead"><b>Pushing and Popping</b> - Deals with data changing due to pushing/popping of nodes in the underlying tree.
</p>
<img src="/dang-sunburst/images/interactive_pushpop.png" class="index_img img-responsive" />
<img src="/images/interactive_pushpop.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="dynamic/pushpop.html">Push/Pop: Dynamic Sunburst</a></p>
<p>&nbsp;</p>
@ -124,8 +128,103 @@ display increasing levels of detail about the same dimension. Ring 1 contains x @@ -124,8 +128,103 @@ display increasing levels of detail about the same dimension. Ring 1 contains x
</div>
<div class="row">
<h2><b>Donut Charts</b></h2>
<p class="lead">Mmmmm... donuts.</p>
<p class="lead"><b>Simple Donut: Static Donut</b> - Shows how to make a simple, static donut chart.
</p>
<img src="/images/staticdonut.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="simpledonut/staticdonut.html">Simple Donut: Static Donut</a></p>
<p>&nbsp;</p>
<p class="lead"><b>Simple Donut: Donut Picker</b> - Selecting different pie data using data structures and buttons.
</p>
<img src="/images/donutpicker.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="simpledonut/donutpicker.html">Simple Donut: Donut Picker</a></p>
<p>&nbsp;</p>
<p class="lead"><b>Simple Donut: Bar Donut Linked Charts</b> - Selecting different pie and bar data using data structures and buttons.
</p>
<img src="/images/bardonut.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="simpledonut/bardonut.html">Simple Donut: Bar Donut</a></p>
<p>&nbsp;</p>
</div>
<div class="row">
<h2><b>Radar Charts</b></h2>
<p class="lead">Radar up, be on the lookout.</p>
<p class="lead"><b>Radar 1</b> - Shows how to make a simple, static radar chart.
</p>
<img src="/images/radar1.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="radar/radar1.html">Radar1</a></p>
<p>&nbsp;</p>
<p class="lead"><b>D3 Plus Radar Chart</b> - Making a simple static radar chart with D3 plus.
</p>
<!--
<img src="/images/radar2.png" class="index_img img-responsive" />
-->
<p><a class="index_btn btn btn-large btn-primary" href="radar/plusradar.html">D3 Plus Radar</a></p>
<p>&nbsp;</p>
</div>
<div class="row">
<h2><b>Objects</b></h2>
<p class="lead">Object-oriented D3?</p>
<p class="lead"><b>Bar 1</b> - Shows how to make a chart with an object.
</p>
<p><a class="index_btn btn btn-large btn-primary" href="objects/bar1.html">Bar 1</a></p>
<p>&nbsp;</p>
</div>
<div class="row">
<h2><b>Bubbles</b></h2>
</p>
<img src="/images/bubblechart.png" class="index_img img-responsive" />
<p><a class="index_btn btn btn-large btn-primary" href="bubbles/bubbles.html">Bubbles</a></p>
<p>&nbsp;</p>
</div>
</div>
@ -148,18 +247,17 @@ display increasing levels of detail about the same dimension. Ring 1 contains x @@ -148,18 +247,17 @@ display increasing levels of detail about the same dimension. Ring 1 contains x
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/dang-sunburst/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/dang-sunburst/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->

86
docs/letters/bigrams.html

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Sunburst Chart: Bigrams</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/letters/bigrams.css" rel="stylesheet" stype="text/css" />
<div ng-app="bigramsApp">
<div ng-controller="HelloController" ng-init="initialize()">
<p>
<bigram-sunburst-head></bigram-sunburst-head>
<bigram-sunburst-controls></bigram-sunburst-controls>
<bigram-sunburst-chart></bigram-sunburst-chart>
</p>
</div>
</div>
<script type="text/javascript" src="/letters/bigrams_modcontrol.js"></script>
<script type="text/javascript" src="/letters/bigrams_sunburst.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

0
letters/bigrams.json → docs/letters/bigrams.json

0
letters/bigrams2.css → docs/letters/bigrams2.css

86
docs/letters/bigrams2.html

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Interactive Sunburst Chart: Bigrams</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/letters/bigrams2.css" rel="stylesheet" stype="text/css" />
<div ng-app="bigramsApp">
<div ng-controller="Bigram2Controller" ng-init="initialize()">
<p>
<bigram2-sunburst-head></bigram2-sunburst-head>
<bigram2-sunburst-controls></bigram2-sunburst-controls>
<bigram2-sunburst-chart></bigram2-sunburst-chart>
</p>
</div>
</div>
<script type="text/javascript" src="/letters/bigrams2_modcontrol.js"></script>
<script type="text/javascript" src="/letters/bigrams2_sunburst.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

0
letters/bigrams2_modcontrol.js → docs/letters/bigrams2_modcontrol.js

0
letters/bigrams2_sunburst.js → docs/letters/bigrams2_sunburst.js

0
letters/bigrams_modcontrol.js → docs/letters/bigrams_modcontrol.js

0
letters/bigrams_sunburst.js → docs/letters/bigrams_sunburst.js

0
letters/letter_freq.json → docs/letters/letter_freq.json

84
docs/letters/plain.html

@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Hello</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<div ng-app="lettersApp">
<div ng-controller="HelloController" ng-init="initialize()">
<p>
<plain-sunburst-head></plain-sunburst-head>
<plain-sunburst-controls></plain-sunburst-controls>
<plain-sunburst-chart></plain-sunburst-chart>
</p>
</div>
</div>
<script type="text/javascript" src="/letters/plain_modcontrol.js"></script>
<script type="text/javascript" src="/letters/plain_sunburst.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

0
letters/plain_modcontrol.js → docs/letters/plain_modcontrol.js

0
letters/plain_sunburst.js → docs/letters/plain_sunburst.js

414
docs/objects/bar-chart.js

@ -0,0 +1,414 @@ @@ -0,0 +1,414 @@
/*
* author: charles reid
var data = [
{
groupName: 'group1', // optional, can be used for styling
values: [
{label: "asdf", value: 21},
{label: "qwerty", value: 19},
{label: "woieru", value: 11},
{label: "nxcb", value: 13}
]
},
{
groupName: 'group2', // optional, can be used for styling
values: [
{label: "asdf", value: 21},
{label: "qwerty", value: 19},
{label: "woieru", value: 11},
{label: "nxcb", value: 13}
]
}
];
*/
var BarChart = {
defaultConfig: {
containerClass: 'bar-chart',
w: 600,
h: 600,
maxValue: 0,
color: d3.scale.category10(),
axisLine: true,
axisText: true,
axisJoin: function(d, i) {
return d.className || i;
},
transitionDuration: 300
},
chartSetup: function() {
// default config
var cfg = Object.create(BarChart.defaultConfig);
function bar(selection) {
selection.each(function(both_data) {
var code = both_data[0]['className'];
var data = both_data[0]['axes']
var container = d3.select(this);
console.log('from a special place:');
console.log(data);
//container.empty();
//container.classed(cfg.containerClass, 1);
///////////////////////////////////
// now draw the svg with d3
// ---------------
// the chart itself:
var margin = {
top: 10,
bottom: 100,
right: 30,
left: 50
};
var w = cfg.w;
var h = cfg.h;
var barwidth = w - margin.left - margin.right;
var barheight = h - margin.top - margin.bottom;
var x = d3.scale.ordinal()
.rangeRoundBands([0, barwidth], .1);
var y = d3.scale.linear()
.range([barheight, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10)
x.domain(data.map(function(d) { return d.label; }));
y.domain([0, d3.max(data, function(d) { return d.value; })]);
container.append("g")
.attr("class", "x axis")
.attr("transform", function(d,i) {
return "translate(0,"+ (barheight) + ")";
})
.call(xAxis)
.selectAll("text")
.attr("class", "x axis label")
.attr("transform", "rotate(90)" )
.style("text-anchor", "start")
.attr("dx", "0.5em")
.attr("dy", "-1em");
container.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "y axis label")
.attr("transform", "rotate(90)")
.style("text-anchor", "start")
.attr("y", 6)
.attr("dy", "3.5em");
//.text("Number of Death Records");
var color = d3.scale.category10();
container.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("fill",function(d,i) {
///////////////////////////////////
// uuuugggghhhhhh fiixxxxx
return color(d.label)
///////////////////////////////////
})
.attr("x", function(d) { return x(d.label); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) {
var toptobottom = (barheight);
var toptobartop = y(d.value);
var ht = toptobottom - toptobartop
return ht;
});
function type(d) {
d.value = +d.value;
return d;
}
// else: "No Data" label
});
}
bar.config = function(value) {
if(!arguments.length) {
return cfg;
}
if(arguments.length > 1) {
cfg[arguments[0]] = arguments[1];
}
else {
d3.entries(value || {}).forEach(function(option) {
cfg[option.key] = option.value;
});
}
return bar;
};
return bar;
},
draw: function(id, d, options) {
var chart = BarChart.chart().config(options);
var cfg = chart.config();
d3.select(id).select('svg').remove();
d3.select(id)
.append("svg")
.attr("width", cfg.w)
.attr("height", cfg.h)
.datum(d)
.call(chart);
}
};
/*
* A special bar chart
* from Mike Bostock
*
* http://bl.ocks.org/mbostock/3885304
original data is a TSV in this format:
letter frequency
A .08167
B .01492
C .02782
D .04253
E .12702
F .02288
G .02015
H .06094
I .06966
J .00153
K .00772
L .04025
M .02406
N .06749
O .07507
P .01929
Q .00095
R .05987
S .06327
T .09056
U .02758
V .00978
W .02360
X .00150
Y .01974
Z .00074
Alternative 1:
(Use this one!)
--------------
Single series/univariate bar chart:
[
{
'letter' : 'A',
'frequency' : 0.08167
},
{
'letter' : 'B',
'frequency' : 0.01492
}
...
]
(A bit verbose, but good to stick with this
because it's a structure D3 likes.)
Alternative 2:
(XXXXXX don't use XXXXXXX)
----------------
{
'letter' : ['A','B','C','D', .... ],
'frequency' : [0.08167, 0.01492, ... ]
}
More compact, but requires some untangling.
Not keen on doing this with Javascript.
*/
var BostockBarChart = {
defaultConfig: {
containerClass: 'bostock-bar-chart',
parentDiv: 'bar2_chart',
w: 400,
h: 400,
maxValue: 0,
color: d3.scale.category10(1),
hovercolor: d3.scale.category10(2)
}, //end defaultConfig
/* static chart, easy peasy */
chart: function() {
// default config
var cfg = Object.create(BostockBarChart.defaultConfig);
function bar(selection) {
data = selection.data()[0];
var container = d3.select(this);
// ---------8<-----------
// commence copy and paste from
// http://bl.ocks.org/mbostock/3310560
var margin = {top: 20, right: 30, bottom: 30, left: 40},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], 0.1, 0.2);
var y = d3.scale.linear()
.range([height, 0]);
var svg = container.append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// function(error, data)
// if (error) throw error;
x.domain( data.map(function(d) { return d.letter; }));
y.domain([0, d3.max(data, function(d) { return d.frequency; })]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(d3.svg.axis().scale(x).orient("bottom"));
svg.append("g")
.attr("class", "y axis")
.call(d3.svg.axis().scale(y).orient("left"));
/*
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", "0.71em")
.attr("text-anchor", "end")
.text("Frequency");
*/
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.label); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) { return height - y(d.value); });
svg.selectAll(".bar")
.attr("fill","steelblue");
svg.selectAll(".bar:hover")
.attr("fill","darkred");
function type(d) {
d.frequency = +d.frequency;
return d;
}
// ---------8<-----------
}
bar.config = function(value) {
if(!arguments.length) {
return cfg;
}
if(arguments.length > 1) {
cfg[arguments[0]] = arguments[1];
}
else {
d3.entries(value || {}).forEach(function(option) {
cfg[option.key] = option.value;
});
}
return bar;
};
return bar;
}, //end chart()
draw: function(id, d, options) {
var chart = BostockBarChart.chart().config(options);
var cfg = chart.config();
d3.select(id).select('svg').remove();
d3.select(id)
.append("svg")
.attr("width", cfg.w)
.attr("height", cfg.h)
.datum(d)
.call(chart);
}
}//end BostockBarChart

38
docs/objects/bar1.css

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
path {
stroke: white;
stroke-width: 0.5;
}
div#mouseoverPointPanel,
div#clickedPointPanel {
width: 300px;
}
.fade {
opacity: 0;
-webkit-transition: opacity 0.85s linear;
-moz-transition: opacity 0.85s linear;
-o-transition: opacity 0.85s linear;
transition: opacity 0.85s linear;
}
.fade.in {
opacity: 1;
}
.active {
stroke: black;
stroke-width: 2.0;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
display: none;
}

186
docs/objects/bar1.html

@ -0,0 +1,186 @@ @@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bar Donut Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/objects/bar1.css" rel="stylesheet" stype="text/css" />
<div ng-app="bar1app">
<div ng-controller="bar1controller" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="bar1_title">
<bar1head></bar1head>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="bar1_controls">
<bar1controls></bar1controls>
</div>
</div>
<div class="row">
<div class="col-sm-4" id="bar1_charts">
<div class="row" id="bar1_chart">
<bar1chart></bar1chart>
</div>
</div>
<div class="col-sm-4" id="bar1_text">
<div class="row" id="bar1_panels">
<bar1panel></bar1panel>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="bar1_moretext">
<div class="row" id="bar1_md">
This chart demonstrates linking a donut chart with a bar chart,
so that a single controller filters data on both.
It also effectively implements the "folding up" technique
demonstrated with the Donut Picker chart.
<br />
<br />
The data visualized are death records from the United States in 2014.
Death records are anonymized and classified by many variables,
including gender and manner of death, and released to the public.
Statistics about these variables are counted up for different ICD 10 codes,
which indicate various circumstances present at death, and visualized above.
<br/>
<br/>
Here, we bundle bar and donut plot data together by ICD 10 code.
When the user picks an ICD 10 code using buttons, we filter the data
plotted by the bar and donut plots.
<pre style="font-size: 8px;">
[
{
"code": "T510"},
"donut":
[
{"value": 17, "label": "M"},
{"value": 4, "label": "F"}
],
"bar":
[
{"value": 10, "label": "Accident"},
{"value": 0, "label": "Suicide"},
{"value": 0, "label": "Homicide"},
{"value": 3, "label": "Natural"}
]
},
{
"code": "Y14"},
"donut":
[
{"value": 1, "label": "M"},
{"value": 3, "label": "F"}
],
"bar":
[
{"value": 4, "label": "Accident"},
{"value": 2, "label": "Suicide"},
{"value": 0, "label": "Homicide"},
{"value": 2, "label": "Natural"}
]
},
...
]
</pre>
Once we filter on "code", we get the "donut" array, and pass it to the D3 pie chart object,
which renders the d ata structure into the donut chart on the left. Likewise, the "bar" array
is sent to the bar chart and visualized accordingly.
</div>
</div>
</div>
</div>
</div>
<script src="http://d3js.org/d3.v3.js"></script>
<script type="text/javascript" src="/objects/bar1_modcontrol.js"></script>
<script type="text/javascript" src="/objects/bar1_chart.js"></script>
<script type="text/javascript" src="/objects/bar-chart.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

72
docs/objects/bar1.json

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
[{"className": "S324", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "S328", "axes": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "Y15", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "Y14", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 5, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I120", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 23, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I129", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "A051", "axes": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "W19", "axes": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T465", "axes": [{"value": 0, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C449", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C119", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C444", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T519", "axes": [{"value": 2, "label": "Accident"}, {"value": 1, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T510", "axes": [{"value": 37, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T511", "axes": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "K117", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "W18", "axes": [{"value": 13, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C781", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I38", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 18, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "M109", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 5, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "G610", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J159", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J150", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J151", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J152", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 6, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C259", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 49, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I829", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T983", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "R402", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C254", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "F059", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "F051", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C341", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "K909", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J90", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 13, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T443", "axes": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J969", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 141, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J961", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 29, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "J960", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 55, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "V439", "axes": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "K137", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "S061", "axes": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "S060", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "R090", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 28, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "R092", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 48, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "R098", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "S066", "axes": [{"value": 3, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "S065", "axes": [{"value": 8, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "T794", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I698", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 8, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I694", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 18, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I690", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "D693", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "D695", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "D696", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "D699", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "K739", "axes": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "X78", "axes": [{"value": 0, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "X74", "axes": [{"value": 0, "label": "Accident"}, {"value": 35, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "I10", "axes": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 246, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C099", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "P236", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "K922", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 66, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "K920", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "Q938", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "D487", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "Q200", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C151", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "C159", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 25, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "X94", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 1, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "V224", "axes": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"className": "G409", "axes": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]}]

398
docs/objects/bar1_chart.js

@ -0,0 +1,398 @@ @@ -0,0 +1,398 @@
var ng;
dir = [];
//////////////////////////////////////
// Chart Directives
//
// This file defines Angular directives
// that use D3 to draw charts.
//
///////////////////////////////////////
// Header Directives:
//
// Print out instructions, title, etc.
ng = a.directive('bar1head', function($compile) {
function link(scope, element, attr) {
var el = element[0];
$(el).empty();
var dir = $("div#bar1_title");
var h1 = $("<h1 />");
var b = $("<b />")
.text("bar1 Chart Example")
.appendTo(h1);
h1.appendTo(dir);
var p = $("<p />", {
"class" : "normal" })
.html("The following charts show statistics about death records, classified by ICD 10 code. Select an ICD 10 code to view statistics about gender and manner of death.")
.appendTo(dir);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
///////////////////////////////////////////////
// Chart Controls Directives
ng = a.directive('bar1controls', function($compile) {
function link(scope, element, attr) {
// wait to build the buttons until we've loaded the data,
// since the buttons come from the data.
scope.$parent.$watch('pickerData',doStuff);
function doStuff() {
if(!scope.$parent.pickerData) { return; }
buildButtons(element, scope.$parent);
}
};
function buildButtons(element,pscope) {
var mydiv = "div#bar1_controls";
var el = $(mydiv);
var div = $("<div />");
// ------------------------------------
// Add ICD 10 code buttons
//
var btn_grp = $("<div />", {
"id" : "codebtns",
"class" : "btn-group"
});
for( var i = 0; i < pscope.pickerData.length; i++ ) {
var this_code = pscope.pickerData[i]['code']
var code = $("<a />", {
"class" : "btn btn-code btn-large btn-primary",
"changecode" : "",
"id" : "btn_"+this_code,
"code" : this_code,
})
.html( this_code )
.appendTo(btn_grp);
}
// to make buttons in this btn group active,
// you have to use D3's classed() method
// after you add the elements to the document
// (i.e., after you call $compile)
angular.element(el).append($compile(btn_grp)(pscope));
pscope.updateCode = function() {
// -----------------------------
// make button for active icd 10 code
d3.selectAll("a.btn-code").classed('active',false);
var btnlabel = "a#btn_"+pscope.icd10code;
d3.selectAll(btnlabel).classed('active',true);
};
pscope.$watch('icd10code',pscope.updateCode);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
//////////////////////////////////
// Action directive:
// What to do when the user changes the ICD 10 code
// by clicking an ICD 10 code button
ng = a.directive("changecode", function($compile) {
return function(pscope, element, attrs){
element.bind("click", function(){
// first, update the scope variable
// that holds the current icd 10 code
// (no need to load any new data)
// This is the ICD 10 code the user has selected.
var this_code = attrs['code'];
var this_description = pscope.icd10codes_all[this_code]
//console.log('Changed icd 10 code, updating description:');
//console.log(this_code);
//console.log(this_description);
// !!!!!!!!!!!!!!!!!!!!!!!!
// NOTE
// The lines below - this $apply() method -
// this is the way you change the variable
// at the controller level, and get the
// various watchers to detect changes.
// !!!!!!!!!!!!!!!!!!!!!!!!!!
pscope.$apply(function() {
pscope.icd10code = this_code;
});
pscope.$apply(function() {
pscope.description = this_description;
});
//// This is some weak-sauce,
//// its not even changing value of variable
//pscope.update_icd10code(attrs['code']);
//// ...
//// .......
//// seriously.
//// all we needed was just
//// pscope.$apply()
////
//// smh.
// then run the button controllers update function
pscope.updateCode();
});
}
});
///////////////////////////////////////////////
// Panels:
// Display useful information in a pretty box
ng = a.directive('bar1panel', function($compile) {
function link(scope, element, attr) {
var el = element[0];
var pscope = scope.$parent;
// --------------------------
// add display for details
// assemble the tags,
// then compile the html
// select element of interest with angular.element
// and append the compiled tags
//
var br = $("<br />").appendTo(el);
var panel = $("<div />", {
"class" : "panel panel-primary",
"id" : "first"
});
var panelhead = $("<div />", {
"class" : "panel-heading"
}).appendTo(panel);
var h3 = $("<h3 />", {
"class" : "panel-title"
}).text("Current ICD 10 Code")
.appendTo(panelhead);
var panelbody = $("<div />", {
"class" : "panel-body"
}).appendTo(panel);
var maindiv = $("<div />", {
}).appendTo(panelbody);
var h = $("<h3 />")
.html("ICD 10 Code: [[icd10code]]")
.appendTo(maindiv);
var de = $("<p />", {
"class" : "lead" })
.html("Description: [[description]]")
.appendTo(maindiv);
angular.element(el).prepend($compile(panel)(pscope));
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
///////////////////////////////////////////////
// bar1 chart
//
// This is a bar chart for manner of death.
ng = a.directive('bar1chart', function($compile) {
function link(scope, element, attr) {
scope.$parent.$watch('bar1data',doStuff);
scope.$parent.$watch('icd10code',doStuff);
function doStuff() {
if(!scope.$parent.bar1data) { return; }
if(!scope.$parent.icd10code) { return; }
buildBar(element, scope.$parent);
}
};
function buildBar(element,pscope) {
BarChart.defaultConfig.color = function() {};
BarChart.defaultConfig.w = 400;
BarChart.defaultConfig.h = 400;
var chart = BarChart.chartSetup();
var cfg = chart.config(); // retrieve default config
var mydiv = "div#bar1_chart";
var svg = d3.select(mydiv).append('svg')
.attr('width', cfg.w + cfg.w + 50)
.attr('height', cfg.h + cfg.h / 4);
/////////////////////////////////////////////////////
// update bar chart
//
pscope.updatebar1 = function() {
var all_data = pscope.bar1data;
// ----------------------------------
// Get chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
var code;
var data;
for( var jj=0; jj < all_data.length; jj++ ) {
// set exception handling:
// if no icd10code is set, problems occur.
if(all_data[jj]['className'] == pscope.icd10code) {
code = all_data[jj]['className'];
data = [all_data[jj]]
break;
}
}
if(data==null) {
console.log("Error. Check that ICD 10 code is in data set: "+pscope.icd10code);
console.log(pscope.icd10code);
console.log(all_data);
return;
}
console.log(pscope.icd10code);
console.log(data);
// finished; use data
// ---------------------------------
///////////////////////////////////
// now draw the svg with d3
//
/////////////
// clean it up
//svg.selectAll(".single").remove();
svg.selectAll(".single").remove();
svg.selectAll(".axis").remove();
svg.selectAll(".area").remove();
svg.append('g')
.classed('single', 1)
.datum(data)
.call(chart);
// chart is the BarChart object
}
pscope.$watch('icd10code',pscope.updatebar1);
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);

86
docs/objects/bar1_modcontrol.js

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
///////////////////////////////////////
//
// chart
//
//
var a = angular.module("bar1app", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var datafactory = a.factory('datafactory', function($http, $q) {
return {
getbar1data: function() {
var deferred = $q.defer();
var json_file = 'bar1.json';
$http.get(json_file).success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading json file: '+json_file);
deferred.reject();
});
return deferred.promise;
},
getCodeData: function() {
var deferred = $q.defer();
$http.get('icd10codes.json').success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading icd10codes.json');
deferred.reject();
});
return deferred.promise;
}
}
});
function bar1controller($scope,datafactory) {
$scope.initialize = function() {
$scope.icd10code="S328";
$scope.donutFemale = 0;
$scope.donutMale = 0;
datafactory.getbar1data().then(
function(data) {
$scope.bar1data = data;
}
);
datafactory.getCodeData().then(
function(data) {
$scope.icd10codes_all = data;
var descr = $scope.icd10codes_all[$scope.icd10code];
$scope.description = descr;
}
);
}
/*
// This does not change the value of this
// variable in everyone's parent scope.
// UUUUGGGGHHHHH. Stupid code.
$scope.update_icd10code = function(code) {
$scope.icd10code = code;
console.log("from update_icd10code:"+$scope.icd10code);
}
*/
}
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to bar1controller
var c = a.controller("bar1controller", ["$scope", "datafactory", bar1controller]);

1
docs/objects/icd10codes.json

File diff suppressed because one or more lines are too long

1
docs/radar/icd10codes.json

File diff suppressed because one or more lines are too long

0
docs/radar/plusradar.css

69
docs/radar/plusradar.html

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
<!doctype html>
<meta charset="utf-8">
<head>
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<!--
<div ng-app="plusradarApp">
<div ng-controller="plusradarController" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="plusradar_charts">
<plusradarchart></plusradarchart>
-->
<div id="viz"></div>
<!--
</div>
</div>
</div>
</div>
-->
<script>
var data = [
{"value": 100, "name": "alpha"},
{"value": 70, "name": "beta"},
{"value": 40, "name": "gamma"},
{"value": 15, "name": "delta"},
{"value": 5, "name": "epsilon"},
{"value": 1, "name": "zeta"}
]
d3plus.viz()
.container("#viz")
.data(data)
.type("pie")
.id("name")
.size("value")
.draw()
</script>
<script src="//d3plus.org/js/d3.js"></script>
<script src="//d3plus.org/js/d3plus.js"></script>
<script type="text/javascript" src="/radar/plusradar_modcontrol.js"></script>
<script type="text/javascript" src="/radar/plusradar_chart.js"></script>
</div>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
</body>
</html>

16
docs/radar/plusradar.json

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
[{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "S324", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 3, "label": "F"}], "code": "S328", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "Y15", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 4, "label": "F"}], "code": "Y14", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 5, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 9, "label": "M"}, {"value": 14, "label": "F"}], "code": "I120", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 23, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 2, "label": "F"}], "code": "I129", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "A051", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 3, "label": "F"}], "code": "W19", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 1, "label": "F"}], "code": "T465", "modbars": [{"value": 0, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "C449", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 1, "label": "F"}], "code": "C119", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "C444", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 3, "label": "M"}, {"value": 2, "label": "F"}], "code": "T519", "modbars": [{"value": 2, "label": "Accident"}, {"value": 1, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 30, "label": "M"}, {"value": 12, "label": "F"}], "code": "T510", "modbars": [{"value": 37, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "T511", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "K117", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]}]

127
docs/radar/plusradar_chart.js

@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
var ng;
dir = [];
///////////////////////////////////////////////
// plusradar Chart
//
ng = a.directive('plusradarchart', function($compile) {
function link(scope, element, attr) {
console.log('link');
scope.$parent.$watch('plusradardata',doStuff);
function doStuff() {
if(!scope.$parent.plusradardata) { return; }
buildplusradar(element, scope.$parent);
}
};
function buildplusradar(element,pscope) {
console.log('building');
var mydiv = "div#plusradar_chart";
/////////////////////////////////////////
// Create chart
//
// data has not been loaded yet.
// start by initializing variables
// that don't depend on the data.
//
//var el = element[0];
//$(el).empty();
/////////////////////////////////////////////////////
// update radar chart
//
pscope.updateplusradar = function() {
console.log('updating');
//var all_data = pscope.plusradardata;
// ----------------------------------
// Get chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
/*
var code;
var data;
for( var jj=0; jj < all_data.length; jj++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[jj]['className'] == pscope.icd10code) {
code = all_data[jj]['className'];
data = all_data[jj]
break;
}
}
if(data==null) {
console.log("Error. Check that ICD 10 code is in data set: "+pscope.icd10code);
console.log(pscope.icd10code);
console.log(all_data);
return;
}
*/
// finished; use data
// ---------------------------------
///////////////////////////////////
// now draw the svg with d3
//
//
var data = [
{"value": 100, "name": "alpha"},
{"value": 70, "name": "beta"},
{"value": 40, "name": "gamma"},
{"value": 15, "name": "delta"},
{"value": 5, "name": "epsilon"},
{"value": 1, "name": "zeta"}
];
d3plus.viz()
.container("#viz")
.data(data)
.type("pie")
.id("somethingstupid")
.size("value")
.draw()
}
// ------------------
// if you build it,
// you must update it.
pscope.updateplusradar();
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);

55
docs/radar/plusradar_modcontrol.js

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
///////////////////////////////////////
//
// plusradar
//
// Module/Controller
//
var a = angular.module("plusradarApp", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var datafactory = a.factory('datafactory', function($http, $q) {
return {
getplusradardata: function() {
var deferred = $q.defer();
var json_file = 'plusradar.json';
$http.get(json_file).success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading json file: '+json_file);
deferred.reject();
});
return deferred.promise;
}
}
});
function plusradarController($scope,datafactory) {
$scope.initialize = function() {
//$scope.icd10code="S324";
//$scope.donutFemale = 0;
//$scope.donutMale = 0;
datafactory.getplusradardata().then(
function(data) {
$scope.plusradardata = data;
}
);
}
}
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to controller
var c = a.controller("plusradarController", ["$scope", "datafactory", plusradarController]);

28
docs/radar/plusradar_stupid.html

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
<!doctype html>
<meta charset="utf-8">
<script src="//d3plus.org/js/d3.js"></script>
<script src="//d3plus.org/js/d3plus.js"></script>
<div id="viz"></div>
<script>
var data = [
{"value": 100, "name": "alpha"},
{"value": 70, "name": "beta"},
{"value": 40, "name": "gamma"},
{"value": 15, "name": "delta"},
{"value": 5, "name": "epsilon"},
{"value": 1, "name": "zeta"}
]
d3plus.viz()
.container("#viz")
.data(data)
.type("pie")
.id("name")
.size("value")
.draw()
</script>

292
docs/radar/radar-chart.js

@ -0,0 +1,292 @@ @@ -0,0 +1,292 @@
/*
* Source: https://github.com/alangrafu/radar-chart-d3
* Author: alangrafu
* License: Apache License v2.0 https://github.com/alangrafu/radar-chart-d3/blob/master/LICENSE
*/
var RadarChart = {
defaultConfig: {
containerClass: 'radar-chart',
w: 600,
h: 600,
factor: 0.95,
factorLegend: 1,
levels: 3,
maxValue: 0,
radians: 2 * Math.PI,
color: d3.scale.category10(),
axisLine: true,
axisText: true,
circles: true,
radius: 5,
axisJoin: function(d, i) {
return d.className || i;
},
transitionDuration: 300
},
chart: function() {
// default config
var cfg = Object.create(RadarChart.defaultConfig);
function radar(selection) {
selection.each(function(data) {
var container = d3.select(this);
// allow simple notation
data = data.map(function(datum) {
if(datum instanceof Array) {
datum = {axes: datum};
}
return datum;
});
var maxValue = Math.max(cfg.maxValue, d3.max(data, function(d) {
return d3.max(d.axes, function(o){ return o.value; });
}));
var allAxis = data[0].axes.map(function(i, j){ return i.axis; });
var total = allAxis.length;
var radius = cfg.factor * Math.min(cfg.w / 2, cfg.h / 2);
container.classed(cfg.containerClass, 1);
function getPosition(i, range, factor, func){
factor = typeof factor !== 'undefined' ? factor : 1;
return range * (1 - factor * func(i * cfg.radians / total));
}
function getHorizontalPosition(i, range, factor){
return getPosition(i, range, factor, Math.sin);
}
function getVerticalPosition(i, range, factor){
return getPosition(i, range, factor, Math.cos);
}
// levels && axises
var levelFactors = d3.range(0, cfg.levels).map(function(level) {
return radius * ((level + 1) / cfg.levels);
});
var levelGroups = container.selectAll('g.level-group').data(levelFactors);
levelGroups.enter().append('g');
levelGroups.exit().remove();
levelGroups.attr('class', function(d, i) {
return 'level-group level-group-' + i;
});
var levelLine = levelGroups.selectAll('.level').data(function(levelFactor) {
return d3.range(0, total).map(function() { return levelFactor; });
});
levelLine.enter().append('line');
levelLine.exit().remove();
levelLine
.attr('class', 'level')
.attr('x1', function(levelFactor, i){ return getHorizontalPosition(i, levelFactor); })
.attr('y1', function(levelFactor, i){ return getVerticalPosition(i, levelFactor); })
.attr('x2', function(levelFactor, i){ return getHorizontalPosition(i+1, levelFactor); })
.attr('y2', function(levelFactor, i){ return getVerticalPosition(i+1, levelFactor); })
.attr('transform', function(levelFactor) {
return 'translate(' + (cfg.w/2-levelFactor) + ', ' + (cfg.h/2-levelFactor) + ')';
});
if(cfg.axisLine || cfg.axisText) {
var axis = container.selectAll('.axis').data(allAxis);
var newAxis = axis.enter().append('g');
if(cfg.axisLine) {
newAxis.append('line');
}
if(cfg.axisText) {
newAxis.append('text');
}
axis.exit().remove();
axis.attr('class', 'axis');
if(cfg.axisLine) {
axis.select('line')
.attr('x1', cfg.w/2)
.attr('y1', cfg.h/2)
.attr('x2', function(d, i) { return getHorizontalPosition(i, cfg.w / 2, cfg.factor); })
.attr('y2', function(d, i) { return getVerticalPosition(i, cfg.h / 2, cfg.factor); });
}
if(cfg.axisText) {
axis.select('text')
.attr('class', function(d, i){
var p = getHorizontalPosition(i, 0.5);
return 'legend ' +
((p < 0.4) ? 'left' : ((p > 0.6) ? 'right' : 'middle'));
})
.attr('dy', function(d, i) {
var p = getVerticalPosition(i, 0.5);
return ((p < 0.1) ? '1em' : ((p > 0.9) ? '0' : '0.5em'));
})
.text(function(d) { return d; })
.attr('x', function(d, i){ return getHorizontalPosition(i, cfg.w / 2, cfg.factorLegend); })
.attr('y', function(d, i){ return getVerticalPosition(i, cfg.h / 2, cfg.factorLegend); });
}
}
// content
data.forEach(function(d){
d.axes.forEach(function(axis, i) {
axis.x = getHorizontalPosition(i, cfg.w/2, (parseFloat(Math.max(axis.value, 0))/maxValue)*cfg.factor);
axis.y = getVerticalPosition(i, cfg.h/2, (parseFloat(Math.max(axis.value, 0))/maxValue)*cfg.factor);
});
});
var polygon = container.selectAll(".area").data(data, cfg.axisJoin);
polygon.enter().append('polygon')
.classed({area: 1, 'd3-enter': 1})
.on('mouseover', function (d){
container.classed('focus', 1);
d3.select(this).classed('focused', 1);
})
.on('mouseout', function(){
container.classed('focus', 0);
d3.select(this).classed('focused', 0);
});
polygon.exit()
.classed('d3-exit', 1) // trigger css transition
.transition().duration(cfg.transitionDuration)
.remove();
polygon
.each(function(d, i) {
var classed = {'d3-exit': 0}; // if exiting element is being reused
classed['radar-chart-serie' + i] = 1;
if(d.className) {
classed[d.className] = 1;
}
d3.select(this).classed(classed);
})
// styles should only be transitioned with css
.style('stroke', function(d, i) { return cfg.color(i); })
.style('fill', function(d, i) { return cfg.color(i); })
.transition().duration(cfg.transitionDuration)
// svg attrs with js
.attr('points',function(d) {
return d.axes.map(function(p) {
return [p.x, p.y].join(',');
}).join(' ');
})
.each('start', function() {
d3.select(this).classed('d3-enter', 0); // trigger css transition
});
if(cfg.circles && cfg.radius) {
var tooltip = container.selectAll('.tooltip').data([1]);
tooltip.enter().append('text').attr('class', 'tooltip');
var circleGroups = container.selectAll('g.circle-group').data(data, cfg.axisJoin);
circleGroups.enter().append('g').classed({'circle-group': 1, 'd3-enter': 1});
circleGroups.exit()
.classed('d3-exit', 1) // trigger css transition
.transition().duration(cfg.transitionDuration).remove();
circleGroups
.each(function(d) {
var classed = {'d3-exit': 0}; // if exiting element is being reused
if(d.className) {
classed[d.className] = 1;
}
d3.select(this).classed(classed);
})
.transition().duration(cfg.transitionDuration)
.each('start', function() {
d3.select(this).classed('d3-enter', 0); // trigger css transition
});
var circle = circleGroups.selectAll('.circle').data(function(datum, i) {
return datum.axes.map(function(d) { return [d, i]; });
});
circle.enter().append('circle')
.classed({circle: 1, 'd3-enter': 1})
.on('mouseover', function(d){
tooltip
.attr('x', d[0].x - 10)
.attr('y', d[0].y - 5)
.text(d[0].value)
.classed('visible', 1);
container.classed('focus', 1);
container.select('.area.radar-chart-serie'+d[1]).classed('focused', 1);
})
.on('mouseout', function(d){
tooltip.classed('visible', 0);
container.classed('focus', 0);
container.select('.area.radar-chart-serie'+d[1]).classed('focused', 0);
});
circle.exit()
.classed('d3-exit', 1) // trigger css transition
.transition().duration(cfg.transitionDuration).remove();
circle
.each(function(d) {
var classed = {'d3-exit': 0}; // if exit element reused
classed['radar-chart-serie'+d[1]] = 1;
d3.select(this).classed(classed);
})
// styles should only be transitioned with css
.style('fill', function(d) { return cfg.color(d[1]); })
.transition().duration(cfg.transitionDuration)
// svg attrs with js
.attr('r', cfg.radius)
.attr('cx', function(d) {
return d[0].x;
})
.attr('cy', function(d) {
return d[0].y;
})
.each('start', function() {
d3.select(this).classed('d3-enter', 0); // trigger css transition
});
// ensure tooltip is upmost layer
var tooltipEl = tooltip.node();
tooltipEl.parentNode.appendChild(tooltipEl);
}
});
}
radar.config = function(value) {
if(!arguments.length) {
return cfg;
}
if(arguments.length > 1) {
cfg[arguments[0]] = arguments[1];
}
else {
d3.entries(value || {}).forEach(function(option) {
cfg[option.key] = option.value;
});
}
return radar;
};
return radar;
},
draw: function(id, d, options) {
var chart = RadarChart.chart().config(options);
var cfg = chart.config();
d3.select(id).select('svg').remove();
d3.select(id)
.append("svg")
.attr("width", cfg.w)
.attr("height", cfg.h)
.datum(d)
.call(chart);
}
};

81
docs/radar/radar1.css

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
.area {
fill: #FFD700;
}
.radar-chart .area {
fill-opacity: 0.3;
}
.radar-chart.focus .area {
fill-opacity: 0.3;
}
.radar-chart.focus .area.focused {
fill-opacity: 0.9;
fill: #FFD700;
stroke: none;
}
/*
* from https://rawgit.com/tpreusse/radar-chart-d3/master/src/radar-chart.css
* and https://github.com/alangrafu/radar-chart-d3
*/
.radar-chart .level {
stroke: grey;
stroke-width: 0.5;
}
.radar-chart .axis line {
stroke: grey;
stroke-width: 1;
}
.radar-chart .axis .legend {
font-family: sans-serif;
font-size: 10px;
}
.radar-chart .axis .legend.top {
dy:1em;
}
.radar-chart .axis .legend.left {
text-anchor: start;
}
.radar-chart .axis .legend.middle {
text-anchor: middle;
}
.radar-chart .axis .legend.right {
text-anchor: end;
}
.radar-chart .tooltip {
font-family: sans-serif;
font-size: 13px;
transition: opacity 200ms;
opacity: 0;
}
.radar-chart .tooltip.visible {
opacity: 1;
}
/* area transition when hovering */
.radar-chart .area {
stroke-width: 2;
fill-opacity: 0.5;
}
.radar-chart.focus .area {
fill-opacity: 0.1;
}
.radar-chart.focus .area.focused {
fill-opacity: 0.7;
}
.radar-chart .circle {
fill-opacity: 0.9;
}
/* transitions */
.radar-chart .area, .radar-chart .circle {
transition: opacity 300ms, fill-opacity 200ms;
opacity: 1;
}
.radar-chart .d3-enter, .radar-chart .d3-exit {
opacity: 0;
}

175
docs/radar/radar1.html

@ -0,0 +1,175 @@ @@ -0,0 +1,175 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>radar1 Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/radar/radar1.css" rel="stylesheet" stype="text/css" />
<div ng-app="radar1App">
<div ng-controller="radar1Controller" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="radar1_title">
<radar1head></radar1head>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="radar1_controls">
<radar1controls></radar1controls>
</div>
</div>
<div class="row">
<div class="col-sm-6" id="radar1_charts">
<div class="row" id="radar1_chart">
<radar1chart></radar1chart>
</div>
</div>
<div class="col-sm-6" id="radar1_panels">
<div class="row" id="radar1_panel">
<radar1panel></radar1panel>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="radar1_text">
<div class="row" id="radar1_md">
This chart uses a radar chart that's defined as a single, standalone Javacsript object,
which expects data in a particular structure. Some settings cannot be changed and are implemented as is,
while other options can be configured using a dictionary.
<br />
<br />
The radar chart is connected to data about the month of death,
organized in a hierarchical way, similar to the organization for
the bar and donut charts. The difference is that this time,
the pre-defined RadarChart object was used, which expected
particular data labels.
<br/>
<br/>
Here is how the data looks for this example:
<pre style="font-size: 8px;">
[
{ "className": "S324",
"axes": [
{"value": 1, "axis": "January"},
{"value": 0, "axis": "February"},
...
{"value": 0, "axis": "December"}
]
},
{ "className": "S328",
"axes": [
{"value": 1, "axis": "January"},
{"value": 1, "axis": "February"},
...
{"value": 2, "axis": "December"}
]
},
{ "className": "Y15",
"axes": [
{"value": 3, "axis": "January"},
{"value": 2, "axis": "February"},
...
{"value": 1, "axis": "December"}
]
}
]
</pre>
</div>
</div>
</div>
</div>
</div>
<script src="http://d3js.org/d3.v3.js"></script>
<script type="text/javascript" src="/radar/radar1_modcontrol.js"></script>
<script type="text/javascript" src="/radar/radar1_chart.js"></script>
<script type="text/javascript" src="/radar/radar-chart.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

16
docs/radar/radar1.json

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
[{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "S324", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 3, "label": "F"}], "code": "S328", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "Y15", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 4, "label": "F"}], "code": "Y14", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 5, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 9, "label": "M"}, {"value": 14, "label": "F"}], "code": "I120", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 23, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 2, "label": "F"}], "code": "I129", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "A051", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 3, "label": "F"}], "code": "W19", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 1, "label": "F"}], "code": "T465", "modbars": [{"value": 0, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "C449", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 1, "label": "F"}], "code": "C119", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "C444", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 3, "label": "M"}, {"value": 2, "label": "F"}], "code": "T519", "modbars": [{"value": 2, "label": "Accident"}, {"value": 1, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 30, "label": "M"}, {"value": 12, "label": "F"}], "code": "T510", "modbars": [{"value": 37, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "T511", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "K117", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]}]

700
docs/radar/radar1_chart.js

@ -0,0 +1,700 @@ @@ -0,0 +1,700 @@
var ng;
dir = [];
//////////////////////////////////////
// Chart Directives
//
// This file defines Angular directives
// that use D3 to draw charts.
//
///////////////////////////////////////
// Header Directives:
//
// Print out instructions, title, etc.
ng = a.directive('radar1head', function($compile) {
function link(scope, element, attr) {
var el = element[0];
$(el).empty();
var dir = $("div#radar1_title");
var h1 = $("<h1 />");
var b = $("<b />")
.text("Radar Chart Example")
.appendTo(h1);
h1.appendTo(dir);
var p = $("<p />", {
"class" : "normal" })
.html("A fancy little radar chart.")
.appendTo(dir);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
///////////////////////////////////////////////
// Chart Controls Directives
ng = a.directive('radar1controls', function($compile) {
function link(scope, element, attr) {
// wait to build the buttons until we've loaded the data,
// since the buttons come from the data.
scope.$parent.$watch('radar1data',doStuff);
function doStuff() {
if(!scope.$parent.radar1data) { return; }
buildButtons(element, scope.$parent);
}
};
function buildButtons(element,pscope) {
var mydiv = "div#radar1_controls";
var el = $(mydiv);
var div = $("<div />");
// ------------------------------------
// Add ICD 10 code buttons
//
var btn_grp = $("<div />", {
"id" : "codebtns",
"class" : "btn-group"
});
for( var i = 0; i < pscope.radar1data.length; i++ ) {
var this_code = pscope.radar1data[i]['className']
var code = $("<a />", {
"class" : "btn btn-code btn-large btn-primary",
"changecode" : "",
"id" : "btn_"+this_code,
"code" : this_code,
})
.html( this_code )
.appendTo(btn_grp);
}
// to make buttons in this btn group active,
// you have to use D3's classed() method
// after you add the elements to the document
// (i.e., after you call $compile)
angular.element(el).append($compile(btn_grp)(pscope));
pscope.updateCode = function() {
// -----------------------------
// make button for active icd 10 code
d3.selectAll("a.btn-code").classed('active',false);
var btnlabel = "a#btn_"+pscope.icd10code;
d3.selectAll(btnlabel).classed('active',true);
};
pscope.$watch('icd10code',pscope.updateCode);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
//////////////////////////////////
// Action directive:
// What to do when the user changes the ICD 10 code
// by clicking an ICD 10 code button
ng = a.directive("changecode", function($compile) {
return function(pscope, element, attrs){
element.bind("click", function(){
// first, update the scope variable
// that holds the current icd 10 code
// (no need to load any new data)
// This is the ICD 10 code the user has selected.
var this_code = attrs['code'];
var this_description = pscope.icd10codes_all[this_code]
//console.log('Changed icd 10 code, updating description:');
//console.log(this_code);
//console.log(this_description);
// !!!!!!!!!!!!!!!!!!!!!!!!
// NOTE
// The lines below - this $apply() method -
// this is the way you change the variable
// at the controller level, and get the
// various watchers to detect changes.
// !!!!!!!!!!!!!!!!!!!!!!!!!!
pscope.$apply(function() {
pscope.icd10code = this_code;
});
pscope.$apply(function() {
pscope.description = this_description;
});
//// This is some weak-sauce,
//// its not even changing value of variable
//pscope.update_icd10code(attrs['code']);
//// ...
//// .......
//// seriously.
//// all we needed was just
//// pscope.$apply()
////
//// smh.
//// then run the donut chart update function
//pscope.updateradar1();
// then run the button controllers update function
pscope.updateCode();
});
}
});
///////////////////////////////////////////////
// Panels:
// Display useful information in a pretty box
ng = a.directive('radar1panel', function($compile) {
function link(scope, element, attr) {
var el = element[0];
var pscope = scope.$parent;
// --------------------------
// add display for details
// assemble the tags,
// then compile the html
// select element of interest with angular.element
// and append the compiled tags
//
var br = $("<br />").appendTo(el);
var panel = $("<div />", {
"class" : "panel panel-primary",
"id" : "first"
});
var panelhead = $("<div />", {
"class" : "panel-heading"
}).appendTo(panel);
var h3 = $("<h3 />", {
"class" : "panel-title"
}).text("Current ICD 10 Code")
.appendTo(panelhead);
var panelbody = $("<div />", {
"class" : "panel-body"
}).appendTo(panel);
var maindiv = $("<div />", {
}).appendTo(panelbody);
var h = $("<h3 />")
.html("ICD 10 Code: [[icd10code]]")
.appendTo(maindiv);
var de = $("<p />", {
"class" : "lead" })
.html("Description: [[description]]")
.appendTo(maindiv);
angular.element(el).prepend($compile(panel)(pscope));
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
///////////////////////////////////////////////
// radar1 Chart
//
// This is the actual donut chart, of gender ratios.
ng = a.directive('radar1chart', function($compile) {
function link(scope, element, attr) {
scope.$parent.$watch('radar1data',doStuff);
function doStuff() {
if(!scope.$parent.radar1data) { return; }
buildradar1(element, scope.$parent);
}
};
function buildradar1(element,pscope) {
var mydiv = "div#radar1_chart";
/////////////////////////////////////////
// Create chart
//
// data has not been loaded yet.
// start by initializing variables
// that don't depend on the data.
//
/////////////////////////////////
//
// Wonderful:
//
// https://github.com/alangrafu/radar-chart-d3
//
var el = element[0];
$(el).empty();
RadarChart.defaultConfig.color = function() {};
RadarChart.defaultConfig.radius = 3;
RadarChart.defaultConfig.w = 400;
RadarChart.defaultConfig.h = 400;
//var chart = RadarChart.chart({'minValue':-1});
var chart = RadarChart.chart();
var cfg = chart.config(); // retrieve default config
cfg['minValue'] = -1;
cfg['levels'] = 10;
cfg['circles'] = true;
cfg['axisLine'] = true;
var svg = d3.select(mydiv).append('svg')
.attr('width', cfg.w + cfg.w + 50)
.attr('height', cfg.h + cfg.h / 4);
/////////////////////////////////////////////////////
// update radar chart
//
pscope.updateradar1 = function() {
var all_data = pscope.radar1data;
// ----------------------------------
// Get chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
var code;
var data;
for( var jj=0; jj < all_data.length; jj++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[jj]['className'] == pscope.icd10code) {
code = all_data[jj]['className'];
data = [all_data[jj]]
break;
}
}
if(data==null) {
console.log("Error. Check that ICD 10 code is in data set: "+pscope.icd10code);
console.log(pscope.icd10code);
console.log(all_data);
return;
}
console.log(pscope.icd10code);
console.log(data);
// finished; use data
// ---------------------------------
///////////////////////////////////
// now draw the svg with d3
//
//svg.selectAll(".single").remove();
svg.selectAll(".single").remove();
svg.selectAll(".axis").remove();
svg.selectAll(".area").remove();
svg.append('g')
.classed('single', 1)
.datum(data)
.call(chart);
}
pscope.$watch('icd10code',pscope.updateradar1);
}
/*
/////////////////////////////////////////////////////
// update radar chart
pscope.updateDonut = function() {
var all_data = pscope.radar1data;
// ----------------------------------
// Get pie chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
var code;
var data;
for( var i=0; i < all_data.length; i++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[i]['code'] == pscope.icd10code) {
code = all_data[i]['code'];
data = all_data[i]['modbars'];
break;
}
}
if(data==null) {
console.log("Check ICD 10 code is in data set: "+pscope.icd10code);
console.log(all_data);
return;
}
// finished; use data
// ---------------------------------
// --------------------------------------
// Now we are ready to draw the damn chart.
var cfg = {
radius: 5,
w: w,
h: h,
factor: 1,
factorLegend: .85,
levels: 3,
maxValue: 0,
radians: 2 * Math.PI,
opacityArea: 0.5,
ToRight: 5,
TranslateX: 80,
TranslateY: 30,
ExtraWidthX: 100,
ExtraWidthY: 100,
color: d3.scale.category10()
};
cfg.maxValue = Math.max(cfg.maxValue, d3.max(data.map(function(o){return o.value;})));
var allAxis = (data.map(function(i, j){ return i.label}));
var total = allAxis.length;
var radius = cfg.factor*Math.min(cfg.w/2, cfg.h/2);
var Format = d3.format('%');
d3.select(mydiv).select("svg").remove();
//console.log(allAxis);
//Circular segments
for(var j=0; j<cfg.levels-1; j++){
var levelFactor = cfg.factor*radius*((j+1)/cfg.levels);
svg.selectAll(".levels")
.data(allAxis)
.enter()
.append("svg:line")
.attr("x1", function(d, i){return levelFactor*(1-cfg.factor*Math.sin(i*cfg.radians/total));})
.attr("y1", function(d, i){return levelFactor*(1-cfg.factor*Math.cos(i*cfg.radians/total));})
.attr("x2", function(d, i){return levelFactor*(1-cfg.factor*Math.sin((i+1)*cfg.radians/total));})
.attr("y2", function(d, i){return levelFactor*(1-cfg.factor*Math.cos((i+1)*cfg.radians/total));})
.attr("class", "line")
.attr("class", "mylines")
.style("stroke", "grey")
.style("stroke-opacity", "0.75")
.style("stroke-width", "0.3px")
.attr("transform", "translate(" + (cfg.w/2-levelFactor) + ", " + (cfg.h/2-levelFactor) + ")");
}
//Text indicating at what % each level is
for(var j=0; j<cfg.levels; j++){
var levelFactor = cfg.factor*radius*((j+1)/cfg.levels);
svg.selectAll(".levels")
.data([1]) //dummy data
.enter()
.append("svg:text")
.attr("x", function(d){return levelFactor*(1-cfg.factor*Math.sin(0));})
.attr("y", function(d){return levelFactor*(1-cfg.factor*Math.cos(0));})
.attr("class", "legend")
.style("font-family", "sans-serif")
.style("font-size", "10px")
.attr("transform", "translate(" + (cfg.w/2-levelFactor + cfg.ToRight) + ", " + (cfg.h/2-levelFactor) + ")")
.attr("fill", "#737373")
.text(Format((j+1)*cfg.maxValue/cfg.levels));
}
var axis = svg.selectAll(".axis")
.data(allAxis)
.enter()
.append("g")
.attr("class", "axis");
axis.append("line")
.attr("x1", cfg.w/2)
.attr("y1", cfg.h/2)
.attr("x2", function(d, i){return cfg.w/2*(1-cfg.factor*Math.sin(i*cfg.radians/total));})
.attr("y2", function(d, i){return cfg.h/2*(1-cfg.factor*Math.cos(i*cfg.radians/total));})
.attr("class", "line")
.style("stroke", "grey")
.style("stroke-width", "1px");
axis.append("text")
.attr("class", "legend")
.text(function(d){return d})
.style("font-family", "sans-serif")
.style("font-size", "11px")
.attr("text-anchor", "middle")
.attr("dy", "1.5em")
.attr("transform", function(d, i){return "translate(0, -10)"})
.attr("x", function(d, i){return cfg.w/2*(1-cfg.factorLegend*Math.sin(i*cfg.radians/total))-60*Math.sin(i*cfg.radians/total);})
.attr("y", function(d, i){return cfg.h/2*(1-Math.cos(i*cfg.radians/total))-20*Math.cos(i*cfg.radians/total);});
series = 0;
// for each series...
//
//
// what is this stupid nodes thing
// and where does it come from
// and why doesn't it show up
// because this is the key to getting this
// whole stupid chart to work
dataValues = [];
//svg.selectAll(".mylines")
svg.selectAll(".nodes")
.data(y, function(j, i){
dataValues.push([
cfg.w/2*(1-(parseFloat(Math.max(i, 0))/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total)),
cfg.h/2*(1-(parseFloat(Math.max(i, 0))/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total))
//
// j.value is undefined, causing nans.
//cfg.w/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total)),
//cfg.h/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total))
]);
});
dataValues.push(dataValues[0]);
console.log(dataValues);
svg.selectAll(".area")
.data(dataValues)
.enter()
.append("polygon")
.attr("class", "radar-chart-series"+series)
.style("stroke-width", "2px")
.style("stroke", cfg.color(series))
.attr("points",function(d) {
var str="";
for(var pti=0;pti<d.length;pti++){
str=str+d[pti][0]+","+d[pti][1]+" ";
}
return str;
})
.style("fill", function(j, i){
console.log(series);
console.log(cfg.color(series));
return cfg.color(series)})
.style("fill-opacity", cfg.opacityArea)
.on('mouseover', function (d){
z = "polygon."+d3.select(this).attr("class");
svg.selectAll("polygon")
.transition(200)
.style("fill-opacity", 0.1);
svg.selectAll(z)
.transition(200)
.style("fill-opacity", .7);
})
.on('mouseout', function(){
svg.selectAll("polygon")
.transition(200)
.style("fill-opacity", cfg.opacityArea);
});
//svg.selectAll(".mylines")
svg.selectAll(".nodes")
.data(y,function(d) {
console.log('hello?');
})
.enter()
.append("svg:circle")
.attr("class", "radar-chart-series"+series)
.attr('r', cfg.radius)
.attr("alt", function(j){return Math.max(j.value, 0)})
.attr("cx", function(j, i){
console.log('hello?');
dataValues.push([
cfg.w/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total)),
cfg.h/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total))
]);
return cfg.w/2*(1-(Math.max(j.value, 0)/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total));
})
.attr("cy", function(j, i){
return cfg.h/2*(1-(Math.max(j.value, 0)/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total));
})
.attr("data-id", function(j){return j.axis})
.style("fill", cfg.color(series)).style("fill-opacity", .9)
.on('mouseover', function (d){
newX = parseFloat(d3.select(this).attr('cx')) - 10;
newY = parseFloat(d3.select(this).attr('cy')) - 5;
tooltip
.attr('x', newX)
.attr('y', newY)
.text(Format(d.value))
.transition(200)
.style('opacity', 1);
z = "polygon."+d3.select(this).attr("class");
svg.selectAll("polygon")
.transition(200)
.style("fill-opacity", 0.1);
svg.selectAll(z)
.transition(200)
.style("fill-opacity", .7);
})
.on('mouseout', function(){
tooltip
.transition(200)
.style('opacity', 0);
svg.selectAll("polygon")
.transition(200)
.style("fill-opacity", cfg.opacityArea);
})
.append("svg:title")
.text(function(j){return Math.max(j.value, 0)});
}
*/
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);

76
docs/radar/radar1_modcontrol.js

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
///////////////////////////////////////
//
// radar1
//
// Module/Controller
//
var a = angular.module("radar1App", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var datafactory = a.factory('datafactory', function($http, $q) {
return {
getradar1data: function() {
var deferred = $q.defer();
var json_file = 'radar_mon.json';
$http.get(json_file).success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading json file: '+json_file);
deferred.reject();
});
return deferred.promise;
},
getCodeData: function() {
var deferred = $q.defer();
$http.get('icd10codes.json').success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading icd10codes.json');
deferred.reject();
});
return deferred.promise;
}
}
});
function radar1Controller($scope,datafactory) {
$scope.initialize = function() {
$scope.icd10code="S324";
$scope.donutFemale = 0;
$scope.donutMale = 0;
datafactory.getradar1data().then(
function(data) {
$scope.radar1data = data;
}
);
datafactory.getCodeData().then(
function(data) {
$scope.icd10codes_all = data;
var descr = $scope.icd10codes_all[$scope.icd10code];
$scope.description = descr;
}
);
}
}
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to controller
var c = a.controller("radar1Controller", ["$scope", "datafactory", radar1Controller]);

81
docs/radar/radar2.css

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
.area {
fill: #FFD700;
}
.radar-chart .area {
fill-opacity: 0.3;
}
.radar-chart.focus .area {
fill-opacity: 0.3;
}
.radar-chart.focus .area.focused {
fill-opacity: 0.9;
fill: #FFD700;
stroke: none;
}
/*
* from https://rawgit.com/tpreusse/radar-chart-d3/master/src/radar-chart.css
* and https://github.com/alangrafu/radar-chart-d3
*/
.radar-chart .level {
stroke: grey;
stroke-width: 0.5;
}
.radar-chart .axis line {
stroke: grey;
stroke-width: 1;
}
.radar-chart .axis .legend {
font-family: sans-serif;
font-size: 10px;
}
.radar-chart .axis .legend.top {
dy:1em;
}
.radar-chart .axis .legend.left {
text-anchor: start;
}
.radar-chart .axis .legend.middle {
text-anchor: middle;
}
.radar-chart .axis .legend.right {
text-anchor: end;
}
.radar-chart .tooltip {
font-family: sans-serif;
font-size: 13px;
transition: opacity 200ms;
opacity: 0;
}
.radar-chart .tooltip.visible {
opacity: 1;
}
/* area transition when hovering */
.radar-chart .area {
stroke-width: 2;
fill-opacity: 0.5;
}
.radar-chart.focus .area {
fill-opacity: 0.1;
}
.radar-chart.focus .area.focused {
fill-opacity: 0.7;
}
.radar-chart .circle {
fill-opacity: 0.9;
}
/* transitions */
.radar-chart .area, .radar-chart .circle {
transition: opacity 300ms, fill-opacity 200ms;
opacity: 1;
}
.radar-chart .d3-enter, .radar-chart .d3-exit {
opacity: 0;
}

176
docs/radar/radar2.html

@ -0,0 +1,176 @@ @@ -0,0 +1,176 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>radar2 Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/radar/radar2.css" rel="stylesheet" stype="text/css" />
<div ng-app="radar2App">
<div ng-controller="radar2Controller" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="radar2_title">
<radar2head></radar2head>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="radar2_controls">
<radar2controls></radar2controls>
</div>
</div>
<div class="row">
<div class="col-sm-6" id="radar2_charts">
<div class="row" id="radar2_chart">
<radar2chart></radar2chart>
</div>
</div>
<div class="col-sm-6" id="radar2_panels">
<div class="row" id="radar2_panel">
<radar2panel></radar2panel>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="radar2_text">
<div class="row" id="radar2_md">
This chart uses a radar chart that's defined as a single, standalone Javacsript object,
which expects data in a particular structure. Some settings cannot be changed and are implemented as is,
while other options can be configured using a dictionary.
<br />
<br />
The radar chart is connected to data about the month of death,
organized in a hierarchical way, similar to the organization for
the bar and donut charts. The difference is that this time,
the pre-defined RadarChart object was used, which expected
particular data labels.
<br/>
<br/>
Here is how the data looks for this example:
<pre style="font-size: 8px;">
[
{ "className": "S324",
"axes": [
{"value": 1, "axis": "January"},
{"value": 0, "axis": "February"},
...
{"value": 0, "axis": "December"}
]
},
{ "className": "S328",
"axes": [
{"value": 1, "axis": "January"},
{"value": 1, "axis": "February"},
...
{"value": 2, "axis": "December"}
]
},
{ "className": "Y15",
"axes": [
{"value": 3, "axis": "January"},
{"value": 2, "axis": "February"},
...
{"value": 1, "axis": "December"}
]
}
]
</pre>
</div>
</div>
</div>
</div>
</div>
<script src="http://d3js.org/d3.v3.js"></script>
<script type="text/javascript" src="/radar/radar-chart.js"></script>
<script type="text/javascript" src="/theme/js/uvcharts.js"></script>
<script type="text/javascript" src="/radar/radar2_modcontrol.js"></script>
<script type="text/javascript" src="/radar/radar2_chart.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://getpelican.com">Pelican</a>,
<a href="http://http://stanford.edu/~mwaskom/software/seaborn/">Seaborn</a>,
<a href="http://matplotlib.org">Matplotlib</a>,
<a href="http://numpy.org">Numpy</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<!--
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

16
docs/radar/radar2.json

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
[{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "S324", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 3, "label": "F"}], "code": "S328", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "Y15", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 4, "label": "F"}], "code": "Y14", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 5, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 9, "label": "M"}, {"value": 14, "label": "F"}], "code": "I120", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 23, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 2, "label": "F"}], "code": "I129", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "A051", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 3, "label": "F"}], "code": "W19", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 1, "label": "F"}], "code": "T465", "modbars": [{"value": 0, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "C449", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 1, "label": "F"}], "code": "C119", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "C444", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 3, "label": "M"}, {"value": 2, "label": "F"}], "code": "T519", "modbars": [{"value": 2, "label": "Accident"}, {"value": 1, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 30, "label": "M"}, {"value": 12, "label": "F"}], "code": "T510", "modbars": [{"value": 37, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "T511", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "K117", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]}]

413
docs/radar/radar2_chart.js

@ -0,0 +1,413 @@ @@ -0,0 +1,413 @@
var ng;
dir = [];
//////////////////////////////////////
// Chart Directives
//
// This file defines Angular directives
// that use D3 to draw charts.
//
///////////////////////////////////////
// Header Directives:
//
// Print out instructions, title, etc.
ng = a.directive('radar2head', function($compile) {
function link(scope, element, attr) {
var el = element[0];
$(el).empty();
var dir = $("div#radar2_title");
var h1 = $("<h1 />");
var b = $("<b />")
.text("Radar Chart Example")
.appendTo(h1);
h1.appendTo(dir);
var p = $("<p />", {
"class" : "normal" })
.html("A fancy little radar chart.")
.appendTo(dir);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
///////////////////////////////////////////////
// Chart Controls Directives
ng = a.directive('radar2controls', function($compile) {
function link(scope, element, attr) {
// wait to build the buttons until we've loaded the data,
// since the buttons come from the data.
scope.$parent.$watch('radar2data',doStuff);
function doStuff() {
if(!scope.$parent.radar2data) { return; }
buildButtons(element, scope.$parent);
}
};
function buildButtons(element,pscope) {
var mydiv = "div#radar2_controls";
var el = $(mydiv);
var div = $("<div />");
// ------------------------------------
// Add ICD 10 code buttons
//
var btn_grp = $("<div />", {
"id" : "codebtns",
"class" : "btn-group"
});
for( var i = 0; i < pscope.radar2data.length; i++ ) {
var this_code = pscope.radar2data[i]['className']
var code = $("<a />", {
"class" : "btn btn-code btn-large btn-primary",
"changecode" : "",
"id" : "btn_"+this_code,
"code" : this_code,
})
.html( this_code )
.appendTo(btn_grp);
}
// to make buttons in this btn group active,
// you have to use D3's classed() method
// after you add the elements to the document
// (i.e., after you call $compile)
angular.element(el).append($compile(btn_grp)(pscope));
pscope.updateCode = function() {
// -----------------------------
// make button for active icd 10 code
d3.selectAll("a.btn-code").classed('active',false);
var btnlabel = "a#btn_"+pscope.icd10code;
d3.selectAll(btnlabel).classed('active',true);
};
pscope.$watch('icd10code',pscope.updateCode);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
//////////////////////////////////
// Action directive:
// What to do when the user changes the ICD 10 code
// by clicking an ICD 10 code button
ng = a.directive("changecode", function($compile) {
return function(pscope, element, attrs){
element.bind("click", function(){
// first, update the scope variable
// that holds the current icd 10 code
// (no need to load any new data)
// This is the ICD 10 code the user has selected.
var this_code = attrs['code'];
var this_description = pscope.icd10codes_all[this_code]
//console.log('Changed icd 10 code, updating description:');
//console.log(this_code);
//console.log(this_description);
// !!!!!!!!!!!!!!!!!!!!!!!!
// NOTE
// The lines below - this $apply() method -
// this is the way you change the variable
// at the controller level, and get the
// various watchers to detect changes.
// !!!!!!!!!!!!!!!!!!!!!!!!!!
pscope.$apply(function() {
pscope.icd10code = this_code;
});
pscope.$apply(function() {
pscope.description = this_description;
});
//// This is some weak-sauce,
//// its not even changing value of variable
//pscope.update_icd10code(attrs['code']);
//// ...
//// .......
//// seriously.
//// all we needed was just
//// pscope.$apply()
////
//// smh.
//// then run the donut chart update function
//pscope.updateradar2();
// then run the button controllers update function
pscope.updateCode();
});
}
});
///////////////////////////////////////////////
// Panels:
// Display useful information in a pretty box
ng = a.directive('radar2panel', function($compile) {
function link(scope, element, attr) {
var el = element[0];
var pscope = scope.$parent;
// --------------------------
// add display for details
// assemble the tags,
// then compile the html
// select element of interest with angular.element
// and append the compiled tags
//
var br = $("<br />").appendTo(el);
var panel = $("<div />", {
"class" : "panel panel-primary",
"id" : "first"
});
var panelhead = $("<div />", {
"class" : "panel-heading"
}).appendTo(panel);
var h3 = $("<h3 />", {
"class" : "panel-title"
}).text("Current ICD 10 Code")
.appendTo(panelhead);
var panelbody = $("<div />", {
"class" : "panel-body"
}).appendTo(panel);
var maindiv = $("<div />", {
}).appendTo(panelbody);
var h = $("<h3 />")
.html("ICD 10 Code: [[icd10code]]")
.appendTo(maindiv);
var de = $("<p />", {
"class" : "lead" })
.html("Description: [[description]]")
.appendTo(maindiv);
angular.element(el).prepend($compile(panel)(pscope));
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
///////////////////////////////////////////////
// radar2 Chart
//
// This is the actual donut chart, of gender ratios.
ng = a.directive('radar2chart', function($compile) {
function link(scope, element, attr) {
scope.$parent.$watch('radar2data',doStuff);
function doStuff() {
if(!scope.$parent.radar2data) { return; }
buildradar2(element, scope.$parent);
}
};
function buildradar2(element,pscope) {
var mydiv = "div#radar2_chart";
/////////////////////////////////////////
// Create chart
//
// data has not been loaded yet.
// start by initializing variables
// that don't depend on the data.
//
var el = element[0];
$(el).empty();
/////////////////////////////////////////////////////
// update radar chart
//
pscope.updateradar2 = function() {
var all_data = pscope.radar2data;
// ----------------------------------
// Get chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
var code;
var data;
for( var jj=0; jj < all_data.length; jj++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[jj]['className'] == pscope.icd10code) {
code = all_data[jj]['className'];
data = all_data[jj]
break;
}
}
if(data==null) {
console.log("Error. Check that ICD 10 code is in data set: "+pscope.icd10code);
console.log(pscope.icd10code);
console.log(all_data);
return;
}
// finished; use data
// ---------------------------------
///////////////////////////////////
// now draw the svg with d3
//
d3.select(mydiv).selectAll(".uv-chart-div").remove();
var graphdef = {
categories : ['mycode'],
dataset : {
// This is the most idiotic implementation ever.
// The key, above, is a string. Great. We have string variables.
// But the key below *cannot* be a string.
// Really??? What genius came up with this one?
mycode : [
{ name : '2009', value : 55+Math.random() },
{ name : '2010', value : 61+Math.random() },
{ name : '2011', value : 93+Math.random() },
{ name : '2012', value : 96+Math.random() },
{ name : '2013', value : 120+Math.random() }
]
}
}
var chart = uv.chart('Bar', graphdef, {
effects : {duration : 3.0},
meta : { position : '#radar2_chart' },
legend : { showlegends : false }
});
}
pscope.$watch('icd10code',pscope.updateradar2);
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);

76
docs/radar/radar2_modcontrol.js

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
///////////////////////////////////////
//
// radar2
//
// Module/Controller
//
var a = angular.module("radar2App", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var datafactory = a.factory('datafactory', function($http, $q) {
return {
getradar2data: function() {
var deferred = $q.defer();
var json_file = 'radar_mon.json';
$http.get(json_file).success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading json file: '+json_file);
deferred.reject();
});
return deferred.promise;
},
getCodeData: function() {
var deferred = $q.defer();
$http.get('icd10codes.json').success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading icd10codes.json');
deferred.reject();
});
return deferred.promise;
}
}
});
function radar2Controller($scope,datafactory) {
$scope.initialize = function() {
$scope.icd10code="S324";
$scope.donutFemale = 0;
$scope.donutMale = 0;
datafactory.getradar2data().then(
function(data) {
$scope.radar2data = data;
}
);
datafactory.getCodeData().then(
function(data) {
$scope.icd10codes_all = data;
var descr = $scope.icd10codes_all[$scope.icd10code];
$scope.description = descr;
}
);
}
}
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to controller
var c = a.controller("radar2Controller", ["$scope", "datafactory", radar2Controller]);

72
docs/radar/radar_mod.json

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
[{"className": "S324", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "S328", "axes": [{"value": 1, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 4, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "Y15", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 1, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "Y14", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 5, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I120", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 23, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I129", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "A051", "axes": [{"value": 1, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "W19", "axes": [{"value": 2, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T465", "axes": [{"value": 0, "axis": "Accident"}, {"value": 2, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C449", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C119", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 3, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C444", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T519", "axes": [{"value": 2, "axis": "Accident"}, {"value": 1, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 1, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T510", "axes": [{"value": 37, "axis": "Accident"}, {"value": 2, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 3, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T511", "axes": [{"value": 2, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "K117", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "W18", "axes": [{"value": 13, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C781", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I38", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 18, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "M109", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 5, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "G610", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J159", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 3, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J150", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J151", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J152", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 6, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C259", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 49, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I829", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T983", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "R402", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C254", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "F059", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 4, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "F051", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C341", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "K909", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J90", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 13, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T443", "axes": [{"value": 1, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J969", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 141, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J961", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 29, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "J960", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 55, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "V439", "axes": [{"value": 1, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "K137", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "S061", "axes": [{"value": 2, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "S060", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "R090", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 28, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "R092", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 48, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "R098", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 3, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "S066", "axes": [{"value": 3, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "S065", "axes": [{"value": 8, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 1, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "T794", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I698", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 8, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I694", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 18, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I690", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "D693", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "D695", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "D696", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 4, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "D699", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "K739", "axes": [{"value": 2, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "X78", "axes": [{"value": 0, "axis": "Accident"}, {"value": 2, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "X74", "axes": [{"value": 0, "axis": "Accident"}, {"value": 35, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "I10", "axes": [{"value": 2, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 246, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C099", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "P236", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "K922", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 66, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "K920", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "Q938", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "D487", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 4, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "Q200", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C151", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 1, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "C159", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 25, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "X94", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 1, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "V224", "axes": [{"value": 1, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 0, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]},
{"className": "G409", "axes": [{"value": 0, "axis": "Accident"}, {"value": 0, "axis": "Suicide"}, {"value": 0, "axis": "Homicide"}, {"value": 0, "axis": "Pending investigation"}, {"value": 0, "axis": "Could not determine"}, {"value": 0, "axis": "Self-Inflicted"}, {"value": 2, "axis": "Natural"}, {"value": 0, "axis": "Not specified"}]}]

72
docs/radar/radar_mon.json

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
[{"className": "S324", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "S328", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 2, "axis": "June"}, {"value": 2, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "Y15", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "Y14", "axes": [{"value": 2, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I120", "axes": [{"value": 2, "axis": "January"}, {"value": 2, "axis": "February"}, {"value": 2, "axis": "March"}, {"value": 2, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 6, "axis": "July"}, {"value": 2, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 3, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I129", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "A051", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "W19", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 2, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T465", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C449", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C119", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C444", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T519", "axes": [{"value": 1, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T510", "axes": [{"value": 3, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 6, "axis": "March"}, {"value": 5, "axis": "April"}, {"value": 5, "axis": "May"}, {"value": 6, "axis": "June"}, {"value": 6, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 8, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T511", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "K117", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "W18", "axes": [{"value": 2, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 2, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 2, "axis": "September"}, {"value": 2, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C781", "axes": [{"value": 0, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I38", "axes": [{"value": 3, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 2, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 3, "axis": "June"}, {"value": 3, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 2, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "M109", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 2, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "G610", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J159", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J150", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J151", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J152", "axes": [{"value": 1, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 2, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C259", "axes": [{"value": 4, "axis": "January"}, {"value": 4, "axis": "February"}, {"value": 4, "axis": "March"}, {"value": 3, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 5, "axis": "June"}, {"value": 6, "axis": "July"}, {"value": 7, "axis": "August"}, {"value": 6, "axis": "September"}, {"value": 5, "axis": "October"}, {"value": 3, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I829", "axes": [{"value": 0, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T983", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "R402", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C254", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "F059", "axes": [{"value": 0, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "F051", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C341", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "K909", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J90", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 2, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 2, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 2, "axis": "September"}, {"value": 2, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T443", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J969", "axes": [{"value": 11, "axis": "January"}, {"value": 10, "axis": "February"}, {"value": 13, "axis": "March"}, {"value": 13, "axis": "April"}, {"value": 17, "axis": "May"}, {"value": 13, "axis": "June"}, {"value": 16, "axis": "July"}, {"value": 21, "axis": "August"}, {"value": 11, "axis": "September"}, {"value": 12, "axis": "October"}, {"value": 4, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J961", "axes": [{"value": 4, "axis": "January"}, {"value": 3, "axis": "February"}, {"value": 4, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 3, "axis": "May"}, {"value": 4, "axis": "June"}, {"value": 2, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 4, "axis": "September"}, {"value": 3, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "J960", "axes": [{"value": 5, "axis": "January"}, {"value": 2, "axis": "February"}, {"value": 8, "axis": "March"}, {"value": 6, "axis": "April"}, {"value": 5, "axis": "May"}, {"value": 4, "axis": "June"}, {"value": 7, "axis": "July"}, {"value": 2, "axis": "August"}, {"value": 9, "axis": "September"}, {"value": 6, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "V439", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "K137", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "S061", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "S060", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "R090", "axes": [{"value": 2, "axis": "January"}, {"value": 2, "axis": "February"}, {"value": 5, "axis": "March"}, {"value": 2, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 3, "axis": "July"}, {"value": 4, "axis": "August"}, {"value": 4, "axis": "September"}, {"value": 3, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "R092", "axes": [{"value": 6, "axis": "January"}, {"value": 5, "axis": "February"}, {"value": 7, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 5, "axis": "May"}, {"value": 2, "axis": "June"}, {"value": 8, "axis": "July"}, {"value": 5, "axis": "August"}, {"value": 4, "axis": "September"}, {"value": 4, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "R098", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 2, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "S066", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 1, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "S065", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 3, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 3, "axis": "September"}, {"value": 2, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "T794", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I698", "axes": [{"value": 2, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 3, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I694", "axes": [{"value": 4, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 3, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 2, "axis": "July"}, {"value": 2, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 2, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I690", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "D693", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "D695", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "D696", "axes": [{"value": 0, "axis": "January"}, {"value": 2, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "D699", "axes": [{"value": 0, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "K739", "axes": [{"value": 0, "axis": "January"}, {"value": 2, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "X78", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 1, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "X74", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 2, "axis": "May"}, {"value": 4, "axis": "June"}, {"value": 8, "axis": "July"}, {"value": 7, "axis": "August"}, {"value": 6, "axis": "September"}, {"value": 7, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "I10", "axes": [{"value": 33, "axis": "January"}, {"value": 17, "axis": "February"}, {"value": 32, "axis": "March"}, {"value": 22, "axis": "April"}, {"value": 22, "axis": "May"}, {"value": 24, "axis": "June"}, {"value": 22, "axis": "July"}, {"value": 30, "axis": "August"}, {"value": 20, "axis": "September"}, {"value": 18, "axis": "October"}, {"value": 8, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C099", "axes": [{"value": 0, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "P236", "axes": [{"value": 1, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "K922", "axes": [{"value": 8, "axis": "January"}, {"value": 5, "axis": "February"}, {"value": 5, "axis": "March"}, {"value": 5, "axis": "April"}, {"value": 10, "axis": "May"}, {"value": 7, "axis": "June"}, {"value": 5, "axis": "July"}, {"value": 5, "axis": "August"}, {"value": 7, "axis": "September"}, {"value": 8, "axis": "October"}, {"value": 1, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "K920", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 1, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "Q938", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "D487", "axes": [{"value": 0, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 2, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "Q200", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C151", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "C159", "axes": [{"value": 7, "axis": "January"}, {"value": 1, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 1, "axis": "April"}, {"value": 5, "axis": "May"}, {"value": 2, "axis": "June"}, {"value": 3, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 2, "axis": "September"}, {"value": 4, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "X94", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 1, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "V224", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 0, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 1, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 0, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]},
{"className": "G409", "axes": [{"value": 0, "axis": "January"}, {"value": 0, "axis": "February"}, {"value": 1, "axis": "March"}, {"value": 0, "axis": "April"}, {"value": 0, "axis": "May"}, {"value": 0, "axis": "June"}, {"value": 0, "axis": "July"}, {"value": 0, "axis": "August"}, {"value": 1, "axis": "September"}, {"value": 0, "axis": "October"}, {"value": 0, "axis": "November"}, {"value": 0, "axis": "December"}]}]

38
docs/simpledonut/bardonut.css

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
path {
stroke: white;
stroke-width: 0.5;
}
div#mouseoverPointPanel,
div#clickedPointPanel {
width: 300px;
}
.fade {
opacity: 0;
-webkit-transition: opacity 0.85s linear;
-moz-transition: opacity 0.85s linear;
-o-transition: opacity 0.85s linear;
transition: opacity 0.85s linear;
}
.fade.in {
opacity: 1;
}
.active {
stroke: black;
stroke-width: 2.0;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
display: none;
}

191
docs/simpledonut/bardonut.html

@ -0,0 +1,191 @@ @@ -0,0 +1,191 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bar Donut Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/simpledonut/bardonut.css" rel="stylesheet" stype="text/css" />
<div ng-app="pickerApp">
<div ng-controller="mainController" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="donut_title">
<bardonuthead></bardonuthead>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="donut_controls">
<bardonutcontrols></bardonutcontrols>
</div>
</div>
<div class="row">
<div class="col-sm-4" id="donut_chart">
<div class="row" id="donutpicker_chart">
<donutpickerchart></donutpickerchart>
</div>
</div>
<div class="col-sm-4" id="bar_chart">
<div class="row" id="modbar_chart">
<modbarchart></modbarchart>
</div>
</div>
<div class="col-sm-4" id="donut_text">
<div class="row" id="donut_panels">
<bardonutpanel></bardonutpanel>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="more_donut_text">
<div class="row" id="bardonut_md">
This chart demonstrates linking a donut chart with a bar chart,
so that a single controller filters data on both.
It also effectively implements the "folding up" technique
demonstrated with the Donut Picker chart.
<br />
<br />
The data visualized are death records from the United States in 2014.
Death records are anonymized and classified by many variables,
including gender and manner of death, and released to the public.
Statistics about these variables are counted up for different ICD 10 codes,
which indicate various circumstances present at death, and visualized above.
<br/>
<br/>
Here, we bundle bar and donut plot data together by ICD 10 code.
When the user picks an ICD 10 code using buttons, we filter the data
plotted by the bar and donut plots.
<pre style="font-size: 8px;">
[
{
"code": "T510"},
"donut":
[
{"value": 17, "label": "M"},
{"value": 4, "label": "F"}
],
"bar":
[
{"value": 10, "label": "Accident"},
{"value": 0, "label": "Suicide"},
{"value": 0, "label": "Homicide"},
{"value": 3, "label": "Natural"}
]
},
{
"code": "Y14"},
"donut":
[
{"value": 1, "label": "M"},
{"value": 3, "label": "F"}
],
"bar":
[
{"value": 4, "label": "Accident"},
{"value": 2, "label": "Suicide"},
{"value": 0, "label": "Homicide"},
{"value": 2, "label": "Natural"}
]
},
...
]
</pre>
Once we filter on "code", we get the "donut" array, and pass it to the D3 pie chart object,
which renders the d ata structure into the donut chart on the left. Likewise, the "bar" array
is sent to the bar chart and visualized accordingly.
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="/simpledonut/bardonut_modcontrol.js"></script>
<script type="text/javascript" src="/simpledonut/bardonut_chart.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

16
docs/simpledonut/bardonut.json

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
[{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "S324", "modbars": [{"value": 1, "label": "Natural"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 3, "label": "F"}], "code": "S328", "modbars": [{"value": 1, "label": "Accident"}, {"value": 4, "label": "Natural"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "Y15", "modbars": [{"value": 1, "label": "Could not determine"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 4, "label": "F"}], "code": "Y14", "modbars": [{"value": 5, "label": "Could not determine"}]},
{"donut": [{"value": 9, "label": "M"}, {"value": 14, "label": "F"}], "code": "I120", "modbars": [{"value": 23, "label": "Natural"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 2, "label": "F"}], "code": "I129", "modbars": [{"value": 2, "label": "Natural"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "A051", "modbars": [{"value": 1, "label": "Accident"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 3, "label": "F"}], "code": "W19", "modbars": [{"value": 2, "label": "Accident"}, {"value": 2, "label": "Natural"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 1, "label": "F"}], "code": "T465", "modbars": [{"value": 2, "label": "Suicide"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "C449", "modbars": [{"value": 2, "label": "Natural"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 1, "label": "F"}], "code": "C119", "modbars": [{"value": 3, "label": "Natural"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "C444", "modbars": [{"value": 1, "label": "Natural"}]},
{"donut": [{"value": 3, "label": "M"}, {"value": 2, "label": "F"}], "code": "T519", "modbars": [{"value": 2, "label": "Accident"}, {"value": 1, "label": "Suicide"}, {"value": 1, "label": "Could not determine"}, {"value": 1, "label": "Natural"}]},
{"donut": [{"value": 30, "label": "M"}, {"value": 12, "label": "F"}], "code": "T510", "modbars": [{"value": 37, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 3, "label": "Natural"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "T511", "modbars": [{"value": 2, "label": "Accident"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "K117", "modbars": [{"value": 1, "label": "Natural"}]}]

61
docs/simpledonut/bardonut.md

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
This chart demonstrates linking a donut chart with a bar chart,
so that a single controller filters data on both.
It also effectively implements the "folding up" technique
demonstrated with the Donut Picker chart.
<br />
<br />
The data visualized are death records from the United States in 2014.
Death records are anonymized and classified by many variables,
including gender and manner of death, and released to the public.
Statistics about these variables are counted up for different ICD 10 codes,
which indicate various circumstances present at death, and visualized above.
<br/>
<br/>
Here, we bundle bar and donut plot data together by ICD 10 code.
When the user picks an ICD 10 code using buttons, we filter the data
plotted by the bar and donut plots.
<pre style="font-size: 8px;">
[
{
"code": "T510"},
"donut":
[
{"value": 17, "label": "M"},
{"value": 4, "label": "F"}
],
"bar":
[
{"value": 10, "label": "Accident"},
{"value": 0, "label": "Suicide"},
{"value": 0, "label": "Homicide"},
{"value": 3, "label": "Natural"}
]
},
{
"code": "Y14"},
"donut":
[
{"value": 1, "label": "M"},
{"value": 3, "label": "F"}
],
"bar":
[
{"value": 4, "label": "Accident"},
{"value": 2, "label": "Suicide"},
{"value": 0, "label": "Homicide"},
{"value": 2, "label": "Natural"}
]
},
...
]
</pre>
Once we filter on "code", we get the "donut" array, and pass it to the D3 pie chart object,
which renders the d ata structure into the donut chart on the left. Likewise, the "bar" array
is sent to the bar chart and visualized accordingly.

16
docs/simpledonut/bardonut_allcategories.json

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
[{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "S324", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 3, "label": "F"}], "code": "S328", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 4, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "Y15", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 4, "label": "F"}], "code": "Y14", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 5, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 9, "label": "M"}, {"value": 14, "label": "F"}], "code": "I120", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 23, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 2, "label": "F"}], "code": "I129", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 0, "label": "F"}], "code": "A051", "modbars": [{"value": 1, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 3, "label": "F"}], "code": "W19", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 1, "label": "M"}, {"value": 1, "label": "F"}], "code": "T465", "modbars": [{"value": 0, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "C449", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 2, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 1, "label": "F"}], "code": "C119", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "C444", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 3, "label": "M"}, {"value": 2, "label": "F"}], "code": "T519", "modbars": [{"value": 2, "label": "Accident"}, {"value": 1, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 1, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 30, "label": "M"}, {"value": 12, "label": "F"}], "code": "T510", "modbars": [{"value": 37, "label": "Accident"}, {"value": 2, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 3, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 2, "label": "M"}, {"value": 0, "label": "F"}], "code": "T511", "modbars": [{"value": 2, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 0, "label": "Natural"}, {"value": 0, "label": "Not specified"}]},
{"donut": [{"value": 0, "label": "M"}, {"value": 1, "label": "F"}], "code": "K117", "modbars": [{"value": 0, "label": "Accident"}, {"value": 0, "label": "Suicide"}, {"value": 0, "label": "Homicide"}, {"value": 0, "label": "Pending investigation"}, {"value": 0, "label": "Could not determine"}, {"value": 0, "label": "Self-Inflicted"}, {"value": 1, "label": "Natural"}, {"value": 0, "label": "Not specified"}]}]

732
docs/simpledonut/bardonut_chart.js

@ -0,0 +1,732 @@ @@ -0,0 +1,732 @@
var ng;
dir = [];
//////////////////////////////////////
// Chart Directives
//
// This file defines Angular directives
// that use D3 to draw charts.
//
///////////////////////////////////////
// Header Directives:
//
// Print out instructions, title, etc.
ng = a.directive('bardonuthead', function($compile) {
function link(scope, element, attr) {
var el = element[0];
$(el).empty();
var dir = $("div#donut_title");
var h1 = $("<h1 />");
var b = $("<b />")
.text("Donut Picker Chart Example")
.appendTo(h1);
h1.appendTo(dir);
var p = $("<p />", {
"class" : "normal" })
.html("The following charts show statistics about death records, classified by ICD 10 code. Select an ICD 10 code to view statistics about gender and manner of death.")
.appendTo(dir);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
///////////////////////////////////////////////
// Chart Controls Directives
ng = a.directive('bardonutcontrols', function($compile) {
function link(scope, element, attr) {
// wait to build the buttons until we've loaded the data,
// since the buttons come from the data.
scope.$parent.$watch('pickerData',doStuff);
function doStuff() {
if(!scope.$parent.pickerData) { return; }
buildButtons(element, scope.$parent);
}
};
function buildButtons(element,pscope) {
var mydiv = "div#donut_controls";
var el = $(mydiv);
var div = $("<div />");
// ------------------------------------
// Add ICD 10 code buttons
//
var btn_grp = $("<div />", {
"id" : "codebtns",
"class" : "btn-group"
});
for( var i = 0; i < pscope.pickerData.length; i++ ) {
var this_code = pscope.pickerData[i]['code']
var code = $("<a />", {
"class" : "btn btn-code btn-large btn-primary",
"changecode" : "",
"id" : "btn_"+this_code,
"code" : this_code,
})
.html( this_code )
.appendTo(btn_grp);
}
// to make buttons in this btn group active,
// you have to use D3's classed() method
// after you add the elements to the document
// (i.e., after you call $compile)
angular.element(el).append($compile(btn_grp)(pscope));
pscope.updateCode = function() {
// -----------------------------
// make button for active icd 10 code
d3.selectAll("a.btn-code").classed('active',false);
var btnlabel = "a#btn_"+pscope.icd10code;
d3.selectAll(btnlabel).classed('active',true);
};
pscope.$watch('icd10code',pscope.updateCode);
}
return {
restrict: "E",
link: link,
scope: {}
}
});
dir.push(ng);
//////////////////////////////////
// Action directive:
// What to do when the user changes the ICD 10 code
// by clicking an ICD 10 code button
ng = a.directive("changecode", function($compile) {
return function(pscope, element, attrs){
element.bind("click", function(){
// first, update the scope variable
// that holds the current icd 10 code
// (no need to load any new data)
// This is the ICD 10 code the user has selected.
var this_code = attrs['code'];
var this_description = pscope.icd10codes_all[this_code]
//console.log('Changed icd 10 code, updating description:');
//console.log(this_code);
//console.log(this_description);
// !!!!!!!!!!!!!!!!!!!!!!!!
// NOTE
// The lines below - this $apply() method -
// this is the way you change the variable
// at the controller level, and get the
// various watchers to detect changes.
// !!!!!!!!!!!!!!!!!!!!!!!!!!
pscope.$apply(function() {
pscope.icd10code = this_code;
});
pscope.$apply(function() {
pscope.description = this_description;
});
//// This is some weak-sauce,
//// its not even changing value of variable
//pscope.update_icd10code(attrs['code']);
//// ...
//// .......
//// seriously.
//// all we needed was just
//// pscope.$apply()
////
//// smh.
// then run the donut chart update function
pscope.updateDonut();
// then run the button controllers update function
pscope.updateCode();
});
}
});
///////////////////////////////////////////////
// Panels:
// Display useful information in a pretty box
ng = a.directive('bardonutpanel', function($compile) {
function link(scope, element, attr) {
var el = element[0];
var pscope = scope.$parent;
// --------------------------
// add display for details
// assemble the tags,
// then compile the html
// select element of interest with angular.element
// and append the compiled tags
//
var br = $("<br />").appendTo(el);
var panel = $("<div />", {
"class" : "panel panel-primary",
"id" : "first"
});
var panelhead = $("<div />", {
"class" : "panel-heading"
}).appendTo(panel);
var h3 = $("<h3 />", {
"class" : "panel-title"
}).text("Current ICD 10 Code")
.appendTo(panelhead);
var panelbody = $("<div />", {
"class" : "panel-body"
}).appendTo(panel);
var maindiv = $("<div />", {
}).appendTo(panelbody);
var h = $("<h3 />")
.html("ICD 10 Code: [[icd10code]]")
.appendTo(maindiv);
var de = $("<p />", {
"class" : "lead" })
.html("Description: [[description]]")
.appendTo(maindiv);
angular.element(el).prepend($compile(panel)(pscope));
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
///////////////////////////////////////////////
// Donut Picker Chart
//
// This is the actual donut chart, of gender ratios.
ng = a.directive('donutpickerchart', function($compile) {
function link(scope, element, attr) {
scope.$parent.$watch('pickerData',doStuff);
function doStuff() {
if(!scope.$parent.pickerData) { return; }
buildDonut(element, scope.$parent);
}
};
function buildDonut(element,pscope) {
var mydiv = "div#donutpicker_chart";
/////////////////////////////////////////
// Create chart
//
// data has not been loaded yet.
// start by initializing variables
// that don't depend on the data.
var el = element[0];
$(el).empty();
///////////////////////////////////
// now draw the svg with d3
// ---------------
// the chart itself:
var margin = {
top: 10,
right: 10,
bottom: 10,
left: 10
};
var w = 300,
h = 300;
var width = w - margin.right - margin.left,
height = h - margin.top - margin.bottom;
var radius = Math.min(width, height) / 2;
var x = d3.scale.linear()
.range([0, 2 * Math.PI]);
var y = d3.scale.sqrt()
.range([0, radius]);
var svg = d3.select(mydiv)
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + (height / 2 + 10) + ")");
// ---------------
// chart-specific,
// data-independent variables
//
// Example:
// * sort method
// * tween function
// * colors (maybe)
//
// This would be nice. but, donutMale and donutFemale aren't working.
// And once they are working, they aren't positioned correctly.
// And adding them as d3 text elements makes them... not appear.
// Just shoe-horning in the value on the pie chart label. Better anyway.
/////////var text = svg.append("text")
///////// .attr("class", "title")
///////// .attr('transform', 'translate(90,0)')
///////// .attr("x", w - 70)
///////// .attr("y", 10)
///////// .attr("font-size", "12px")
///////// .attr("fill", "#404040")
///////// .html("Females: [[donutFemale]]<br />Males: [[donutMale]]");
// Sunburst needs these to be functions,
// donut chart does not.
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(radius - 70);
var colors = {
"M" : "#5687d1",
"F" : "#e377c2",
"None" : "#bbbbbb"
};
// if animating, more stuff goes here.
pscope.updateDonut = function() {
var all_data = pscope.pickerData;
// ----------------------------------
// Get pie chart data
//
// Here, we have all donut data
// available to us.
//
// We use the currently-selected ICD 10 code
// to filter which donut data is being plotted.
//
// Where to keep track of current code?
// In the controller (available via pscope).
// pscope.icd10code
//
var code;
var data;
for( var i=0; i < all_data.length; i++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[i]['code'] == pscope.icd10code) {
code = all_data[i]['code'];
data = all_data[i]['donut'];
break;
}
}
// finished; use data
// ---------------------------------
// ----------------------------
// Start with counts of
// donut chart males/females
var donutFemale = 0,
donutMale = 0;
for(var i=0; i<data.length; i++) {
if(data[i].label=="M"){
donutMale = data[i].value;
}
if( data[i].label=="F") {
donutFemale = data[i].value;
}
}
////////////////
// UUUUGGGGGGGGHHHHHHHHHHHH
//
// can't use pscope.$apply() here.
//
// ?????
//
// also, this does not update these variables.
// WTFH
//pscope.donutFemale = donutFemale;
//pscope.donutMale = donutMale;
// ----------------------------
var g = svg.datum(data)
.selectAll("g")
.data(data)
.enter();
var pie = d3.layout.pie()
.sort(null)
.value(function(d) {
return +d.value;
});
var g = svg.selectAll(".arc")
.data(pie(data))
.enter();
// !!!!!!!!!!!!!!!!!!
// note: if you add .append("g")
// to the above var g,
// drawing the arcs will only
// work the first time you do it,
// after that they'll disappear
// and g will be an array of nulls.
// so don't do this!
//
// .append("g");
// !!!!!!!!!!!!!!!!!!
g.append("path")
.attr("d", arc)
.style("fill", function(d) {
return colors[d.data.label];
});
// clear away old labels
svg.selectAll("text").remove();
g.append("text")
.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
.attr("dy", ".35em")
.style("text-anchor", "middle")
.text(function(d) {
if (d.data.value > 0) {
if(d.data.label=="M") {
fancylabel = "Males";
} else if(d.data.label=="F") {
fancylabel = "Females";
}
var biglabel = fancylabel + ": " + d.data.value;
return biglabel;
}
});
}
// ------------------
// if you build it,
// you must update it.
pscope.updateDonut();
pscope.$watch('icd10code',pscope.updateDonut);
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);
///////////////////////////////////////////////
// Manner of Death Bar Chart
//
// This is a bar chart for manner of death.
ng = a.directive('modbarchart', function($compile) {
function link(scope, element, attr) {
scope.$parent.$watch('pickerData',doStuff);
scope.$parent.$watch('icd10code',doStuff);
function doStuff() {
if(!scope.$parent.pickerData) { return; }
if(!scope.$parent.icd10code) { return; }
buildBar(element, scope.$parent);
}
};
function buildBar(element,pscope) {
//
// If you draw any parts of the bar plot
// outside of the updateBar() function,
// the bar plot will not actually change.
//
pscope.updateBar = function() {
//console.log('in update bar');
var mydiv = "div#modbar_chart";
/////////////////////////////////////////
// Create chart
//
// data has not been loaded yet.
// start by initializing variables
// that don't depend on the data.
var chart = $(mydiv);
chart.empty();
///////////////////////////////////
// now draw the svg with d3
// ---------------
// the chart itself:
var margin = {
top: 10,
bottom: 100,
right: 30,
left: 50
};
var w = 400;
var h = 400;
var barwidth = w - margin.left - margin.right;
var barheight = h - margin.top - margin.bottom;
var x = d3.scale.ordinal()
.rangeRoundBands([0, barwidth], .1);
var y = d3.scale.linear()
.range([barheight, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10)
var svg = d3.select(mydiv)
.append("svg")
.attr("width", w)
.attr("height", h)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
/////////////////
// Data-specific stuff
// Start by loading the data
//
var all_data = pscope.pickerData;
var code;
var data;
for( var i=0; i < all_data.length; i++ ) {
// set excpetion handling:
// if no icd10code is set, problems occur.
if(all_data[i]['code'] == pscope.icd10code) {
code = all_data[i]['code'];
data = all_data[i]['modbars'];
break;
}
}
//// data looks good
//console.log(data);
if( data!=null ){
// if you wanna show categories that are zero,
// modify your data. too complicated to fill in here.
x.domain(data.map(function(d) { return d.label; }));
y.domain([0, d3.max(data, function(d) { return d.value; })]);
//svg.selectAll("path").remove();
svg.append("g")
.attr("class", "x axis")
.attr("transform", function(d,i) {
return "translate(0,"+ (barheight) + ")";
})
.call(xAxis)
.selectAll("text")
.attr("class", "x axis label")
.attr("transform", "rotate(90)" )
.style("text-anchor", "start")
.attr("dx", "0.5em")
.attr("dy", "-1em");
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "y axis label")
.attr("transform", "rotate(90)")
.style("text-anchor", "start")
.attr("y", 6)
.attr("dy", "3.5em")
.text("Number of Death Records");
var color2 = d3.scale.category20b();
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("fill",function(d,i) {
return color2(d.label)
})
.attr("x", function(d) { return x(d.label); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) {
var toptobottom = (barheight);
var toptobartop = y(d.value);
var ht = toptobottom - toptobartop
return ht;
});
function type(d) {
d.value = +d.value;
return d;
}
// else: "No Data" label
}
}
// ------------------
// if you build it,
// you must update it.
pscope.updateBar();
}
return {
link: link,
restrict: "E",
scope: { }
};
});
dir.push(ng);

87
docs/simpledonut/bardonut_modcontrol.js

@ -0,0 +1,87 @@ @@ -0,0 +1,87 @@
///////////////////////////////////////
//
// Picker
//
// Module/Controller
//
var a = angular.module("pickerApp", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var datafactory = a.factory('datafactory', function($http, $q) {
return {
getPickerData: function() {
var deferred = $q.defer();
var json_file = 'bardonut_allcategories.json';
$http.get(json_file).success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading json file: '+json_file);
deferred.reject();
});
return deferred.promise;
},
getCodeData: function() {
var deferred = $q.defer();
$http.get('icd10codes.json').success(function(data) {
deferred.resolve(data);
}).error(function(){
console.log('error loading icd10codes.json');
deferred.reject();
});
return deferred.promise;
}
}
});
function MainController($scope,datafactory) {
$scope.initialize = function() {
$scope.icd10code="S328";
$scope.donutFemale = 0;
$scope.donutMale = 0;
datafactory.getPickerData().then(
function(data) {
$scope.pickerData = data;
}
);
datafactory.getCodeData().then(
function(data) {
$scope.icd10codes_all = data;
var descr = $scope.icd10codes_all[$scope.icd10code];
$scope.description = descr;
}
);
}
/*
// This does not change the value of this
// variable in everyone's parent scope.
// UUUUGGGGHHHHH. Stupid code.
$scope.update_icd10code = function(code) {
$scope.icd10code = code;
console.log("from update_icd10code:"+$scope.icd10code);
}
*/
}
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to PickerController
var c = a.controller("mainController", ["$scope", "datafactory", MainController]);

26
docs/simpledonut/donutpicker.css

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
path {
stroke: white;
stroke-width: 0.5;
}
div#mouseoverPointPanel,
div#clickedPointPanel {
width: 300px;
}
.fade {
opacity: 0;
-webkit-transition: opacity 0.85s linear;
-moz-transition: opacity 0.85s linear;
-o-transition: opacity 0.85s linear;
transition: opacity 0.85s linear;
}
.fade.in {
opacity: 1;
}
.active {
stroke: black;
stroke-width: 2.0;
}

174
docs/simpledonut/donutpicker.html

@ -0,0 +1,174 @@ @@ -0,0 +1,174 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Donut Picker Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
-->
<script type="text/javascript" src="/theme/js/angular-1.3.15.js"></script>
<script src="//d3js.org/d3.v3.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/">dang-sunburst <strong></strong></a></h1>
<hr />
<link href="/simpledonut/donutpicker.css" rel="stylesheet" stype="text/css" />
<div ng-app="pickerApp">
<div ng-controller="mainController" ng-init="initialize()">
<div class="row">
<div class="col-sm-12" id="donut_title">
<donut-picker-head></donut-picker-head>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="donut_controls">
<donut-picker-controls></donut-picker-controls>
</div>
</div>
<div class="row">
<div class="col-sm-4" id="donut_chart">
<div class="row" id="donutpicker_chart">
<donut-picker-chart></donut-picker-chart>
</div>
</div>
<div class="col-sm-6" id="donut_text">
<div class="row" id="donut_panels">
<donut-picker-panels></donut-picker-panels>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-10" id="more_donut_text">
<div class="row" id="donutpicker_md">
This is a donut chart with buttons enabling you to pick different
categories of data. This chart is intended to demonstrate how to fold up
high dimensional data into a JSON container that ca be served up and
easily filtered with D3.
<br />
<br />
This data shows statistics about death records from the United States in
2014, in particular the ratio of males to females whose death records
were tagged with these particular ICD 10 codes. The ICD 10 codes indicate
circumstances present at time of death, though not necessarily
the cause of death.
<br/>
<br/>
The key is to add one additional layer of hierarchy to the dictionary containing the data:
data for any pie chart consists of a list of dictionaries, as with the static pie chart,
but this time we add one additional layer to the JSON, which is the code.
The user is then able to select different codes using buttons. Clicking those buttons
sets the filter criteria in the visualization controller, and that change is detected
and propagated, so that the pie chart data is updated and the pie chart re-drawn.
<pre style="font-size: 8px;">
[
{
"code": "T510"},
"donut":
[
{"value": 17, "label": "M"},
{"value": 4, "label": "F"}
]
},
{
"code": "Y14"},
"donut":
[
{"value": 1, "label": "M"},
{"value": 3, "label": "F"}
]
},
{
"code": "S328"},
"donut":
[
{"value": 2, "label": "M"},
{"value": 3, "label": "F"}
]
},
...
]
</pre>
Once we filter on "code", we get the "donut" array, and pass it to the D3 pie chart object,
which renders the d ata structure into the donut chart on the left.
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="/simpledonut/donutpicker_modcontrol.js"></script>
<script type="text/javascript" src="/simpledonut/donutpicker_chart.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>,
<a href="http://bootswatch.com">Bootswatch</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>,
<a href="https://jquery.com/">jQuery</a>),
and Python (
<a href="http://pydata.org">Pandas</a>,
<a href="http://getpelican.com">Pelican</a>,
<a href="http://ipython.org">Jupyter Notebooks</a>).
</p>
<script type="text/javascript" src="/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/theme/js/bootstrap-3.3.4.js"></script>
<!--
<script type="text/javascript" src="/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save