d3
Version:
A small, free JavaScript library for manipulating documents based on data.
105 lines (99 loc) • 16 kB
HTML
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>d3.js ~ Treemap</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='treemap'>Treemap</h1>
<div class='gallery' id='chart'>
<button class='first active' id='size'>
Size
</button><button class='last' id='count'>
Count
</button><p />
</div><link href='button.css' rel='stylesheet' type='text/css' /><link href='treemap.css' rel='stylesheet' type='text/css' /><script src='../d3.layout.js?1.12.0' type='text/javascript'> </script><script src='treemap.js' type='text/javascript'> </script>
<p>Treemap design invented by <a href='http://www.cs.umd.edu/~ben/'>Ben Shneiderman</a>. Squarified algorithm by <a href='http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.6685'>Bruls, Huizing and van Wijk</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'>500</span><span class='p'>,</span>
<span class='lineno'> 3</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'> 4</span>
<span class='lineno'> 5</span> <span class='kd'>var</span> <span class='nx'>treemap</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'>treemap</span><span class='p'>()</span>
<span class='lineno'> 6</span> <span class='p'>.</span><span class='nx'>size</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='lineno'> 7</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'> 8</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='nx'>d</span><span class='p'>.</span><span class='nx'>value</span><span class='p'>;</span> <span class='p'>})</span>
<span class='lineno'> 9</span> <span class='p'>.</span><span class='nx'>sticky</span><span class='p'>(</span><span class='kc'>true</span><span class='p'>);</span>
<span class='lineno'>10</span>
<span class='lineno'>11</span> <span class='kd'>var</span> <span class='nx'>div</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'>"#chart"</span><span class='p'>).</span><span class='nx'>append</span><span class='p'>(</span><span class='s2'>"div"</span><span class='p'>)</span>
<span class='lineno'>12</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"position"</span><span class='p'>,</span> <span class='s2'>"relative"</span><span class='p'>)</span>
<span class='lineno'>13</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"width"</span><span class='p'>,</span> <span class='nx'>w</span> <span class='o'>+</span> <span class='s2'>"px"</span><span class='p'>)</span>
<span class='lineno'>14</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"height"</span><span class='p'>,</span> <span class='nx'>h</span> <span class='o'>+</span> <span class='s2'>"px"</span><span class='p'>);</span>
<span class='lineno'>15</span>
<span class='lineno'>16</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>json</span><span class='p'>(</span><span class='s2'>"flare.json"</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'>17</span> <span class='nx'>div</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'>"div"</span><span class='p'>)</span>
<span class='lineno'>18</span> <span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>treemap</span><span class='p'>)</span>
<span class='lineno'>19</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'>"div"</span><span class='p'>)</span>
<span class='lineno'>20</span> <span class='p'>.</span><span class='nx'>attr</span><span class='p'>(</span><span class='s2'>"class"</span><span class='p'>,</span> <span class='s2'>"cell"</span><span class='p'>)</span>
<span class='lineno'>21</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"background"</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'>children</span> <span class='o'>?</span> <span class='nx'>color</span><span class='p'>(</span><span class='nx'>d</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='o'>:</span> <span class='kc'>null</span><span class='p'>;</span> <span class='p'>})</span>
<span class='lineno'>22</span> <span class='p'>.</span><span class='nx'>call</span><span class='p'>(</span><span class='nx'>cell</span><span class='p'>)</span>
<span class='lineno'>23</span> <span class='p'>.</span><span class='nx'>text</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'>children</span> <span class='o'>?</span> <span class='kc'>null</span> <span class='o'>:</span> <span class='nx'>d</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'>24</span>
<span class='lineno'>25</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>"#size"</span><span class='p'>).</span><span class='nx'>on</span><span class='p'>(</span><span class='s2'>"click"</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>()</span> <span class='p'>{</span>
<span class='lineno'>26</span> <span class='nx'>div</span><span class='p'>.</span><span class='nx'>selectAll</span><span class='p'>(</span><span class='s2'>"div"</span><span class='p'>)</span>
<span class='lineno'>27</span> <span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>treemap</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='nx'>d</span><span class='p'>.</span><span class='nx'>value</span><span class='p'>;</span> <span class='p'>}))</span>
<span class='lineno'>28</span> <span class='p'>.</span><span class='nx'>transition</span><span class='p'>()</span>
<span class='lineno'>29</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'>30</span> <span class='p'>.</span><span class='nx'>call</span><span class='p'>(</span><span class='nx'>cell</span><span class='p'>);</span>
<span class='lineno'>31</span>
<span class='lineno'>32</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>"#size"</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>"active"</span><span class='p'>,</span> <span class='kc'>true</span><span class='p'>);</span>
<span class='lineno'>33</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>"#count"</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>"active"</span><span class='p'>,</span> <span class='kc'>false</span><span class='p'>);</span>
<span class='lineno'>34</span> <span class='p'>});</span>
<span class='lineno'>35</span>
<span class='lineno'>36</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>"#count"</span><span class='p'>).</span><span class='nx'>on</span><span class='p'>(</span><span class='s2'>"click"</span><span class='p'>,</span> <span class='kd'>function</span><span class='p'>()</span> <span class='p'>{</span>
<span class='lineno'>37</span> <span class='nx'>div</span><span class='p'>.</span><span class='nx'>selectAll</span><span class='p'>(</span><span class='s2'>"div"</span><span class='p'>)</span>
<span class='lineno'>38</span> <span class='p'>.</span><span class='nx'>data</span><span class='p'>(</span><span class='nx'>treemap</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'>39</span> <span class='p'>.</span><span class='nx'>transition</span><span class='p'>()</span>
<span class='lineno'>40</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'>41</span> <span class='p'>.</span><span class='nx'>call</span><span class='p'>(</span><span class='nx'>cell</span><span class='p'>);</span>
<span class='lineno'>42</span>
<span class='lineno'>43</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>"#size"</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>"active"</span><span class='p'>,</span> <span class='kc'>false</span><span class='p'>);</span>
<span class='lineno'>44</span> <span class='nx'>d3</span><span class='p'>.</span><span class='nx'>select</span><span class='p'>(</span><span class='s2'>"#count"</span><span class='p'>).</span><span class='nx'>classed</span><span class='p'>(</span><span class='s2'>"active"</span><span class='p'>,</span> <span class='kc'>true</span><span class='p'>);</span>
<span class='lineno'>45</span> <span class='p'>});</span>
<span class='lineno'>46</span> <span class='p'>});</span>
<span class='lineno'>47</span>
<span class='lineno'>48</span> <span class='kd'>function</span> <span class='nx'>cell</span><span class='p'>()</span> <span class='p'>{</span>
<span class='lineno'>49</span> <span class='k'>this</span>
<span class='lineno'>50</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"left"</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='s2'>"px"</span><span class='p'>;</span> <span class='p'>})</span>
<span class='lineno'>51</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"top"</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'>y</span> <span class='o'>+</span> <span class='s2'>"px"</span><span class='p'>;</span> <span class='p'>})</span>
<span class='lineno'>52</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"width"</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'>dx</span> <span class='o'>-</span> <span class='mi'>1</span> <span class='o'>+</span> <span class='s2'>"px"</span><span class='p'>;</span> <span class='p'>})</span>
<span class='lineno'>53</span> <span class='p'>.</span><span class='nx'>style</span><span class='p'>(</span><span class='s2'>"height"</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'>dy</span> <span class='o'>-</span> <span class='mi'>1</span> <span class='o'>+</span> <span class='s2'>"px"</span><span class='p'>;</span> <span class='p'>});</span>
<span class='lineno'>54</span> <span class='p'>}</span>
</code></pre>
</div>
</div>
<div class="foot">Copyright © 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>