18
18
font-family : Helvetica, sans-serif;
19
19
fill : black;
20
20
}
21
+ .cell {
22
+ position : absolute;
23
+ }
21
24
</ style >
22
25
</ head >
23
26
< body >
24
- < p > Check out this sweet graph :</ p >
27
+ < p > Check this sweet data out :</ p >
25
28
< div id ="lang_freq "> </ div >
29
+ < p > Or, if you prefer:</ p >
30
+ < div id ="byte_freq "> </ div >
31
+ < script >
32
+ var data = <%= languages %> ;
26
33
27
- </ body >
28
- < script >
29
- var data = <%= languages %> ;
34
+ var barWidth = 40 ;
35
+ var width = ( barWidth + 10 ) * data . length ;
36
+ var height = 300 ;
30
37
31
- var barWidth = 40 ;
32
- var width = ( barWidth + 10 ) * data . length ;
33
- var height = 300 ;
38
+ var x = d3 . scale . linear ( ) . domain ( [ 0 , data . length ] ) . range ( [ 0 , width ] ) ;
39
+ var y = d3 . scale . linear ( ) . domain ( [ 0 , d3 . max ( data , function ( datum ) { return datum . count ; } ) ] ) .
40
+ rangeRound ( [ 0 , height ] ) ;
34
41
35
- var x = d3 . scale . linear ( ) . domain ( [ 0 , data . length ] ) . range ( [ 0 , width ] ) ;
36
- var y = d3 . scale . linear ( ) . domain ( [ 0 , d3 . max ( data , function ( datum ) { return datum . count ; } ) ] ) .
37
- rangeRound ( [ 0 , height ] ) ;
42
+ // add the canvas to the DOM
43
+ var languageBars = d3 . select ( "#lang_freq" ) .
44
+ append ( "svg:svg" ) .
45
+ attr ( "width" , width ) .
46
+ attr ( "height" , height ) ;
38
47
39
- // add the canvas to the DOM
40
- var languageBars = d3 . select ( "#lang_freq" ) .
41
- append ( "svg:svg" ) .
42
- attr ( "width" , width ) .
43
- attr ( "height" , height ) ;
48
+ languageBars . selectAll ( "rect" ) .
49
+ data ( data ) .
50
+ enter ( ) .
51
+ append ( "svg:rect" ) .
52
+ attr ( "x" , function ( datum , index ) { return x ( index ) ; } ) .
53
+ attr ( "y" , function ( datum ) { return height - y ( datum . count ) ; } ) .
54
+ attr ( "height" , function ( datum ) { return y ( datum . count ) ; } ) .
55
+ attr ( "width" , barWidth ) ;
44
56
45
- languageBars . selectAll ( "rect" ) .
46
- data ( data ) .
47
- enter ( ) .
48
- append ( "svg:rect" ) .
49
- attr ( "x" , function ( datum , index ) { return x ( index ) ; } ) .
50
- attr ( "y" , function ( datum ) { return height - y ( datum . count ) ; } ) .
51
- attr ( "height" , function ( datum ) { return y ( datum . count ) ; } ) .
52
- attr ( "width" , barWidth ) ;
57
+ languageBars . selectAll ( "text" ) .
58
+ data ( data ) .
59
+ enter ( ) .
60
+ append ( "svg:text" ) .
61
+ attr ( "x" , function ( datum , index ) { return x ( index ) + barWidth ; } ) .
62
+ attr ( "y" , function ( datum ) { return height - y ( datum . count ) ; } ) .
63
+ attr ( "dx" , - barWidth / 2 ) .
64
+ attr ( "dy" , "1.2em" ) .
65
+ attr ( "text-anchor" , "middle" ) .
66
+ text ( function ( datum ) { return datum . count ; } ) ;
53
67
54
- languageBars . selectAll ( "text" ) .
55
- data ( data ) .
56
- enter ( ) .
57
- append ( "svg:text" ) .
58
- attr ( "x" , function ( datum , index ) { return x ( index ) + barWidth ; } ) .
59
- attr ( "y" , function ( datum ) { return height - y ( datum . count ) ; } ) .
60
- attr ( "dx" , - barWidth / 2 ) .
61
- attr ( "dy" , "1.2em" ) .
62
- attr ( "text-anchor" , "middle" ) .
63
- text ( function ( datum ) { return datum . count ; } ) ;
68
+ languageBars . selectAll ( "text.yAxis" ) .
69
+ data ( data ) .
70
+ enter ( ) . append ( "svg:text" ) .
71
+ attr ( "x" , function ( datum , index ) { return x ( index ) + barWidth ; } ) .
72
+ attr ( "y" , height ) .
73
+ attr ( "dx" , - barWidth / 2 ) .
74
+ attr ( "text-anchor" , "middle" ) .
75
+ text ( function ( datum ) { return datum . language ; } ) .
76
+ attr ( "transform" , "translate(0, 18)" ) .
77
+ attr ( "class" , "yAxis" ) ;
78
+ </ script >
79
+ < script >
80
+ var language_bytes = <%= language_byte_count %>
64
81
65
- languageBars . selectAll ( "text.yAxis" ) .
66
- data ( data ) .
67
- enter ( ) . append ( "svg:text" ) .
68
- attr ( "x" , function ( datum , index ) { return x ( index ) + barWidth ; } ) .
69
- attr ( "y" , height ) .
70
- attr ( "dx" , - barWidth / 2 ) .
71
- attr ( "text-anchor" , "middle" ) .
72
- text ( function ( datum ) { return datum . language ; } ) .
73
- attr ( "transform" , "translate(0, 18)" ) .
74
- attr ( "class" , "yAxis" ) ;
75
- </ script >
82
+ var childrenFunction = function ( d ) { return d . elements } ;
83
+ var sizeFunction = function ( d ) { return d . count ; } ;
84
+ var colorFunction = function ( d ) { return Math . floor ( Math . random ( ) * 20 ) } ;
85
+ var nameFunction = function ( d ) { return d . name ; } ;
86
+
87
+ var color = d3 . scale . linear ( )
88
+ . domain ( [ 0 , 10 , 15 , 20 ] )
89
+ . range ( [ "grey" , "green" , "yellow" , "red" ] ) ;
90
+
91
+ drawTreemap ( 5000 , 2000 , '#byte_freq' , language_bytes , childrenFunction , nameFunction , sizeFunction , colorFunction , color ) ;
92
+
93
+ function drawTreemap ( height , width , elementSelector , language_bytes , childrenFunction , nameFunction , sizeFunction , colorFunction , colorScale ) {
94
+
95
+ var treemap = d3 . layout . treemap ( )
96
+ . children ( childrenFunction )
97
+ . size ( [ width , height ] )
98
+ . value ( sizeFunction ) ;
99
+
100
+ var div = d3 . select ( elementSelector )
101
+ . append ( "div" )
102
+ . style ( "position" , "relative" )
103
+ . style ( "width" , width + "px" )
104
+ . style ( "height" , height + "px" ) ;
105
+
106
+ div . data ( language_bytes ) . selectAll ( "div" )
107
+ . data ( function ( d ) { return treemap . nodes ( d ) ; } )
108
+ . enter ( )
109
+ . append ( "div" )
110
+ . attr ( "class" , "cell" )
111
+ . style ( "background" , function ( d ) { return colorScale ( colorFunction ( d ) ) ; } )
112
+ . call ( cell )
113
+ . text ( nameFunction ) ;
114
+ }
115
+
116
+ function cell ( ) {
117
+ this
118
+ . style ( "left" , function ( d ) { return d . x + "px" ; } )
119
+ . style ( "top" , function ( d ) { return d . y + "px" ; } )
120
+ . style ( "width" , function ( d ) { return d . dx - 1 + "px" ; } )
121
+ . style ( "height" , function ( d ) { return d . dy - 1 + "px" ; } ) ;
122
+ }
123
+ </ script >
124
+ </ body >
76
125
</ html >
0 commit comments