UNPKG

d3

Version:

A small, free JavaScript library for manipulating documents based on data.

126 lines (120 loc) 20.4 kB
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>d3.js ~ Sunburst</title> <script type="text/javascript" src="../d3.js?1.12.0"></script> <style type="text/css"> @import url("../style.css?1.10.0"); @import url("../syntax.css?1.6.0"); </style> </head> <body> <div class="body"> <div class="content"> <div class="topbar"> <a href="../">Overview</a> <b><a href="../ex/">Examples</a></b> <a href="../api/">Documentation</a> <a href="http://github.com/mbostock/d3/archives/master">Download</a> </div> <div class="sidebar"> <h1>d3.js</h1> </div> <h1 id='sunburst'>Sunburst</h1> <div class='gallery' id='chart'> <button class='first' id='size'> Size </button><button class='last active' id='count'> Count </button><p /> </div><link href='button.css' rel='stylesheet' type='text/css' /><script src='../d3.layout.js?1.12.0' type='text/javascript'> </script><script src='sunburst.js' type='text/javascript'> </script> <p>Sunburst design by <a href='http://www.cc.gatech.edu/gvu/ii/sunburst/'>John Stasko</a>. Data courtesy <a href='http://flare.prefuse.org/'>Jeff Heer</a>.</p> <h3 id='source_code'>Source Code</h3> <div class='highlight'><pre><code class='js'><span class='lineno'> 1</span> <span class='kd'>var</span> <span class='nx'>w</span> <span class='o'>=</span> <span class='mi'>960</span><span class='p'>,</span> <span class='lineno'> 2</span> <span class='nx'>h</span> <span class='o'>=</span> <span class='mi'>700</span><span class='p'>,</span> <span class='lineno'> 3</span> <span class='nx'>r</span> <span class='o'>=</span> <span class='nb'>Math</span><span class='p'>.</span><span class='nx'>min</span><span class='p'>(</span><span class='nx'>w</span><span class='p'>,</span> <span class='nx'>h</span><span class='p'>)</span> <span class='o'>/</span> <span class='mi'>2</span><span class='p'>,</span> <span class='lineno'> 4</span> <span class='nx'>color</span> <span class='o'>=</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>scale</span><span class='p'>.</span><span class='nx'>category20c</span><span class='p'>();</span> <span class='lineno'> 5</span> <span class='lineno'> 6</span> <span class='kd'>var</span> <span class='nx'>vis</span> <span class='o'>=</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#chart&quot;</span><span class='p'>).</span><span class='nx'>append</span><span class='p'>(</span><span class='s2'>&quot;svg:svg&quot;</span><span class='p'>)</span> <span class='lineno'> 7</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;width&quot;</span><span class='p'>,</span> <span class='nx'>w</span><span class='p'>)</span> <span class='lineno'> 8</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;height&quot;</span><span class='p'>,</span> <span class='nx'>h</span><span class='p'>)</span> <span class='lineno'> 9</span> <span class='p'>.</span><span class='nx'>append</span><span class='p'>(</span><span class='s2'>&quot;svg:g&quot;</span><span class='p'>)</span> <span class='lineno'>10</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;transform&quot;</span><span class='p'>,</span> <span class='s2'>&quot;translate(&quot;</span> <span class='o'>+</span> <span class='nx'>w</span> <span class='o'>/</span> <span class='mi'>2</span> <span class='o'>+</span> <span class='s2'>&quot;,&quot;</span> <span class='o'>+</span> <span class='nx'>h</span> <span class='o'>/</span> <span class='mi'>2</span> <span class='o'>+</span> <span class='s2'>&quot;)&quot;</span><span class='p'>);</span> <span class='lineno'>11</span> <span class='lineno'>12</span> <span class='kd'>var</span> <span class='nx'>partition</span> <span class='o'>=</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>layout</span><span class='p'>.</span><span class='nx'>partition</span><span class='p'>()</span> <span class='lineno'>13</span> <span class='p'>.</span><span class='nx'>sort</span><span class='p'>(</span><span class='kc'>null</span><span class='p'>)</span> <span class='lineno'>14</span> <span class='p'>.</span><span class='nx'>size</span><span class='p'>([</span><span class='mi'>2</span> <span class='o'>*</span> <span class='nb'>Math</span><span class='p'>.</span><span class='nx'>PI</span><span class='p'>,</span> <span class='nx'>r</span> <span class='o'>*</span> <span class='nx'>r</span><span class='p'>])</span> <span class='lineno'>15</span> <span class='p'>.</span><span class='nx'>children</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nb'>isNaN</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>.</span><span class='nx'>value</span><span class='p'>)</span> <span class='o'>?</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>entries</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>.</span><span class='nx'>value</span><span class='p'>)</span> <span class='o'>:</span> <span class='kc'>null</span><span class='p'>;</span> <span class='p'>})</span> <span class='lineno'>16</span> <span class='p'>.</span><span class='nx'>value</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='mi'>1</span><span class='p'>;</span> <span class='p'>});</span> <span class='lineno'>17</span> <span class='lineno'>18</span> <span class='kd'>var</span> <span class='nx'>arc</span> <span class='o'>=</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>svg</span><span class='p'>.</span><span class='nx'>arc</span><span class='p'>()</span> <span class='lineno'>19</span> <span class='p'>.</span><span class='nx'>startAngle</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>x</span><span class='p'>;</span> <span class='p'>})</span> <span class='lineno'>20</span> <span class='p'>.</span><span class='nx'>endAngle</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>x</span> <span class='o'>+</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>dx</span><span class='p'>;</span> <span class='p'>})</span> <span class='lineno'>21</span> <span class='p'>.</span><span class='nx'>innerRadius</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nb'>Math</span><span class='p'>.</span><span class='nx'>sqrt</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>.</span><span class='nx'>y</span><span class='p'>);</span> <span class='p'>})</span> <span class='lineno'>22</span> <span class='p'>.</span><span class='nx'>outerRadius</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nb'>Math</span><span class='p'>.</span><span class='nx'>sqrt</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>.</span><span class='nx'>y</span> <span class='o'>+</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>dy</span><span class='p'>);</span> <span class='p'>});</span> <span class='lineno'>23</span> <span class='lineno'>24</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>json</span><span class='p'>(</span><span class='s2'>&quot;flare.json&quot;</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>(</span><span class='nx'>json</span><span class='p'>)</span> <span class='p'>{</span> <span class='lineno'>25</span> <span class='nx'>vis</span><span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>d3</span><span class='p'>.</span><span class='nx'>entries</span><span class='p'>(</span><span class='nx'>json</span><span class='p'>)).</span><span class='nx'>selectAll</span><span class='p'>(</span><span class='s2'>&quot;path&quot;</span><span class='p'>)</span> <span class='lineno'>26</span> <span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>partition</span><span class='p'>)</span> <span class='lineno'>27</span> <span class='p'>.</span><span class='nx'>enter</span><span class='p'>().</span><span class='nx'>append</span><span class='p'>(</span><span class='s2'>&quot;svg:path&quot;</span><span class='p'>)</span> <span class='lineno'>28</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;display&quot;</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>depth</span> <span class='o'>?</span> <span class='kc'>null</span> <span class='o'>:</span> <span class='s2'>&quot;none&quot;</span><span class='p'>;</span> <span class='p'>})</span> <span class='c1'>// hide inner ring</span> <span class='lineno'>29</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;d&quot;</span><span class='p'>,</span> <span class='nx'>arc</span><span class='p'>)</span> <span class='lineno'>30</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;stroke&quot;</span><span class='p'>,</span> <span class='s2'>&quot;#fff&quot;</span><span class='p'>)</span> <span class='lineno'>31</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;fill&quot;</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nx'>color</span><span class='p'>((</span><span class='nx'>d</span><span class='p'>.</span><span class='nx'>children</span> <span class='o'>?</span> <span class='nx'>d</span> <span class='o'>:</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>parent</span><span class='p'>).</span><span class='nx'>data</span><span class='p'>.</span><span class='nx'>key</span><span class='p'>);</span> <span class='p'>})</span> <span class='lineno'>32</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>&quot;fill-rule&quot;</span><span class='p'>,</span> <span class='s2'>&quot;evenodd&quot;</span><span class='p'>);</span> <span class='lineno'>33</span> <span class='lineno'>34</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#size&quot;</span><span class='p'>).</span><span class='nx'>on</span><span class='p'>(</span><span class='s2'>&quot;click&quot;</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>()</span> <span class='p'>{</span> <span class='lineno'>35</span> <span class='nx'>vis</span><span class='p'>.</span><span class='nx'>selectAll</span><span class='p'>(</span><span class='s2'>&quot;path&quot;</span><span class='p'>)</span> <span class='lineno'>36</span> <span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>repartition</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>value</span><span class='p'>;</span> <span class='p'>}))</span> <span class='lineno'>37</span> <span class='p'>.</span><span class='nx'>transition</span><span class='p'>()</span> <span class='lineno'>38</span> <span class='p'>.</span><span class='nx'>duration</span><span class='p'>(</span><span class='mi'>1500</span><span class='p'>)</span> <span class='lineno'>39</span> <span class='p'>.</span><span class='nx'>attrTween</span><span class='p'>(</span><span class='s2'>&quot;d&quot;</span><span class='p'>,</span> <span class='nx'>arcTween</span><span class='p'>);</span> <span class='lineno'>40</span> <span class='lineno'>41</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#size&quot;</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>&quot;active&quot;</span><span class='p'>,</span> <span class='kc'>true</span><span class='p'>);</span> <span class='lineno'>42</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#count&quot;</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>&quot;active&quot;</span><span class='p'>,</span> <span class='kc'>false</span><span class='p'>);</span> <span class='lineno'>43</span> <span class='p'>});</span> <span class='lineno'>44</span> <span class='lineno'>45</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#count&quot;</span><span class='p'>).</span><span class='nx'>on</span><span class='p'>(</span><span class='s2'>&quot;click&quot;</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>()</span> <span class='p'>{</span> <span class='lineno'>46</span> <span class='nx'>vis</span><span class='p'>.</span><span class='nx'>selectAll</span><span class='p'>(</span><span class='s2'>&quot;path&quot;</span><span class='p'>)</span> <span class='lineno'>47</span> <span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>repartition</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='k'>return</span> <span class='mi'>1</span><span class='p'>;</span> <span class='p'>}))</span> <span class='lineno'>48</span> <span class='p'>.</span><span class='nx'>transition</span><span class='p'>()</span> <span class='lineno'>49</span> <span class='p'>.</span><span class='nx'>duration</span><span class='p'>(</span><span class='mi'>1500</span><span class='p'>)</span> <span class='lineno'>50</span> <span class='p'>.</span><span class='nx'>attrTween</span><span class='p'>(</span><span class='s2'>&quot;d&quot;</span><span class='p'>,</span> <span class='nx'>arcTween</span><span class='p'>);</span> <span class='lineno'>51</span> <span class='lineno'>52</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#size&quot;</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>&quot;active&quot;</span><span class='p'>,</span> <span class='kc'>false</span><span class='p'>);</span> <span class='lineno'>53</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>&quot;#count&quot;</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>&quot;active&quot;</span><span class='p'>,</span> <span class='kc'>true</span><span class='p'>);</span> <span class='lineno'>54</span> <span class='p'>});</span> <span class='lineno'>55</span> <span class='p'>});</span> <span class='lineno'>56</span> <span class='lineno'>57</span> <span class='c1'>// Compute a new partition, stashing the old value for transition.</span> <span class='lineno'>58</span> <span class='kd'>function</span> <span class='nx'>repartition</span><span class='p'>(</span><span class='nx'>value</span><span class='p'>)</span> <span class='p'>{</span> <span class='lineno'>59</span> <span class='k'>return</span> <span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>)</span> <span class='p'>{</span> <span class='lineno'>60</span> <span class='kd'>var</span> <span class='nx'>olds</span> <span class='o'>=</span> <span class='nx'>partition</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>),</span> <span class='lineno'>61</span> <span class='nx'>news</span> <span class='o'>=</span> <span class='nx'>partition</span><span class='p'>.</span><span class='nx'>value</span><span class='p'>(</span><span class='nx'>value</span><span class='p'>)(</span><span class='nx'>d</span><span class='p'>);</span> <span class='lineno'>62</span> <span class='nx'>news</span><span class='p'>.</span><span class='nx'>forEach</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(</span><span class='nx'>d</span><span class='p'>,</span> <span class='nx'>i</span><span class='p'>)</span> <span class='p'>{</span> <span class='lineno'>63</span> <span class='nx'>d</span><span class='p'>.</span><span class='nx'>prev</span> <span class='o'>=</span> <span class='nx'>olds</span><span class='p'>[</span><span class='nx'>i</span><span class='p'>];</span> <span class='lineno'>64</span> <span class='p'>});</span> <span class='lineno'>65</span> <span class='k'>return</span> <span class='nx'>news</span><span class='p'>;</span> <span class='lineno'>66</span> <span class='p'>};</span> <span class='lineno'>67</span> <span class='p'>}</span> <span class='lineno'>68</span> <span class='lineno'>69</span> <span class='c1'>// Interpolate the arcs in data space.</span> <span class='lineno'>70</span> <span class='kd'>function</span> <span class='nx'>arcTween</span><span class='p'>(</span><span class='nx'>a</span><span class='p'>)</span> <span class='p'>{</span> <span class='lineno'>71</span> <span class='kd'>var</span> <span class='nx'>i</span> <span class='o'>=</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>interpolate</span><span class='p'>({</span><span class='nx'>x</span><span class='o'>:</span> <span class='nx'>a</span><span class='p'>.</span><span class='nx'>prev</span><span class='p'>.</span><span class='nx'>x</span><span class='p'>,</span> <span class='nx'>dx</span><span class='o'>:</span> <span class='nx'>a</span><span class='p'>.</span><span class='nx'>prev</span><span class='p'>.</span><span class='nx'>dx</span><span class='p'>},</span> <span class='nx'>a</span><span class='p'>);</span> <span class='lineno'>72</span> <span class='k'>return</span> <span class='kd'>function</span><span class='p'>(</span><span class='nx'>t</span><span class='p'>)</span> <span class='p'>{</span> <span class='lineno'>73</span> <span class='k'>return</span> <span class='nx'>arc</span><span class='p'>(</span><span class='nx'>i</span><span class='p'>(</span><span class='nx'>t</span><span class='p'>));</span> <span class='lineno'>74</span> <span class='p'>};</span> <span class='lineno'>75</span> <span class='p'>}</span> </code></pre> </div> </div> <div class="foot">Copyright &copy; 2011 <a href="http://bost.ocks.org/mike">Mike Bostock</a></div> </div> </div> <a href="http://github.com/mbostock/d3"><img style="position:absolute;top:0;right:0;border:0;" width="149" height="149" src="../forkme.png" alt="Fork me on GitHub" /></a> </body> </html>