5
5
< script src ="/lib/d3.v3.min.js "> </ script >
6
6
< script src ="/dist/dimple.v1.1.5.js "> </ script >
7
7
< script type ="text/javascript ">
8
- var svg = dimple . newSvg ( "#chartContainer" , 590 , 400 ) ;
9
- d3 . tsv ( "/data/example_data.tsv" , function ( data ) {
10
-
11
- // Filter for 1 year
12
- data = dimple . filterData ( data , "Month" , [
13
- "Jan-12" , "Feb-12" , "Mar-12" , "Apr-12" , "May-12" , "Jun-12" ,
14
- "Jul-12" , "Aug-12" , "Sep-12" , "Oct-12" , "Nov-12" , "Dec-12"
15
- ] ) ;
16
-
17
- // Create the indicator chart on the right of the main chart
18
- var indicator = new dimple . chart ( svg , data ) ;
19
-
20
- // Pick blue as the default and orange for the selected month
21
- var defaultColor = indicator . defaultColors [ 0 ] ;
22
- var indicatorColor = indicator . defaultColors [ 2 ] ;
23
-
24
- // The frame duration for the animation in milliseconds
25
- var frame = 750 ;
26
-
27
- // Place the indicator bar chart to the right
28
- indicator . setBounds ( 434 , 49 , 153 , 311 ) ;
29
-
30
- // Add dates along the y axis
31
- var y = indicator . addCategoryAxis ( "y" , "Month" ) ;
32
- y . addOrderRule ( "Date" , "Desc" ) ;
33
-
34
- // Use sales for bar size and hide the axis
35
- var x = indicator . addMeasureAxis ( "x" , "Unit Sales" ) ;
36
- x . hidden = true ;
37
-
38
- // Add the bars to the indicator and add event handlers
39
- var s = indicator . addSeries ( null , dimple . plot . bar ) ;
40
- s . addEventHandler ( "click" , onClick ) ;
41
- // Draw the side chart
42
- indicator . draw ( ) ;
43
-
44
- // Remove the title from the y axis
45
- y . titleShape . remove ( ) ;
46
-
47
- // Remove the lines from the y axis
48
- y . shapes . selectAll ( "line,path" ) . remove ( ) ;
49
-
50
- // Move the y axis text inside the plot area
51
- y . shapes . selectAll ( "text" )
52
- . style ( "text-anchor" , "start" )
53
- . style ( "font-size" , "11px" )
54
- . attr ( "transform" , "translate(18, 0.5)" ) ;
55
-
56
- // This block simply adds the legend title. I put it into a d3 data
57
- // object to split it onto 2 lines. This technique works with any
58
- // number of lines, it isn't dimple specific.
59
- svg . selectAll ( "title_text" )
60
- . data ( [ "Click bar to select" ,
61
- "and pause. Click again" ,
62
- "to resume animation" ] )
63
- . enter ( )
64
- . append ( "text" )
65
- . attr ( "x" , 435 )
66
- . attr ( "y" , function ( d , i ) { return 15 + i * 12 ; } )
67
- . style ( "font-family" , "sans-serif" )
68
- . style ( "font-size" , "10px" )
69
- . style ( "color" , "Black" )
70
- . text ( function ( d ) { return d ; } ) ;
71
-
72
- // Manually set the bar colors
73
- s . shapes
74
- . attr ( "rx" , 10 )
75
- . attr ( "ry" , 10 )
76
- . style ( "fill" , defaultColor . fill )
77
- . style ( "stroke" , defaultColor . stroke )
78
- . style ( "opacity" , 0.4 ) ;
79
- svg . selectAll ( "rect.Jan-12" )
80
- . style ( "fill" , indicatorColor . fill )
81
- . style ( "stroke" , indicatorColor . stroke ) ;
82
-
83
- // Draw the main chart
84
- var bubbles = new dimple . chart ( svg , data ) ;
85
- bubbles . setBounds ( 60 , 50 , 355 , 310 )
86
- bubbles . addMeasureAxis ( "x" , "Distribution" ) ;
87
- bubbles . addMeasureAxis ( "y" , "Price" ) ;
88
- bubbles . addSeries ( [ "SKU" , "Channel" , "Owner" ] , dimple . plot . bubble )
89
- bubbles . addLegend ( 60 , 10 , 410 , 60 ) ;
90
-
91
- // Add a storyboard to the main chart and set the tick event
92
- var story = bubbles . setStoryboard ( "Month" , onTick ) ;
93
- // Change the frame duration
94
- story . frameDuration = frame ;
95
- // Order the storyboard by date
96
- story . addOrderRule ( "Date" ) ;
97
-
98
- // Draw the bubble chart
99
- bubbles . draw ( ) ;
100
-
101
- // Orphan the legends as they are consistent but by default they
102
- // will refresh on tick
103
- bubbles . legends = [ ] ;
104
- // Remove the storyboard label because the chart will indicate the
105
- // current month instead of the label
106
- story . storyLabel . remove ( ) ;
107
-
108
- // On click of the side chart
109
- function onClick ( e ) {
110
- // Pause the animation
111
- story . pauseAnimation ( ) ;
112
- // If it is already selected resume the animation
113
- // otherwise pause and move to the selected month
114
- if ( e . yValue === story . getFrameValue ( ) ) {
115
- story . startAnimation ( ) ;
116
- } else {
117
- story . goToFrame ( e . yValue ) ;
118
- story . pauseAnimation ( ) ;
119
- }
120
- }
121
-
122
- // On tick of the main charts storyboard
123
- function onTick ( e ) {
124
- // Color all shapes the same
125
- s . shapes
126
- . transition ( )
127
- . duration ( frame / 2 )
128
- . style ( "fill" , defaultColor . fill )
129
- . style ( "stroke" , defaultColor . stroke ) ;
130
- // Then color the selected shape differently
131
- svg . selectAll ( "rect." + e )
132
- . transition ( )
133
- . duration ( frame / 2 )
134
- . style ( "fill" , indicatorColor . fill )
135
- . style ( "stroke" , indicatorColor . stroke ) ;
136
- }
137
- } ) ;
8
+ var svg = dimple . newSvg ( "#chartContainer" , 590 , 400 ) ;
9
+ d3 . tsv ( "/data/example_data.tsv" , function ( data ) {
10
+
11
+ // Filter for 1 year
12
+ data = dimple . filterData ( data , "Month" , [
13
+ "Jan-12" , "Feb-12" , "Mar-12" , "Apr-12" , "May-12" , "Jun-12" ,
14
+ "Jul-12" , "Aug-12" , "Sep-12" , "Oct-12" , "Nov-12" , "Dec-12"
15
+ ] ) ;
16
+
17
+ // Create the indicator chart on the right of the main chart
18
+ var indicator = new dimple . chart ( svg , data ) ;
19
+
20
+ // Pick blue as the default and orange for the selected month
21
+ var defaultColor = indicator . defaultColors [ 0 ] ;
22
+ var indicatorColor = indicator . defaultColors [ 2 ] ;
23
+
24
+ // The frame duration for the animation in milliseconds
25
+ var frame = 2000 ;
26
+
27
+ var firstTick = true ;
28
+
29
+ // Place the indicator bar chart to the right
30
+ indicator . setBounds ( 434 , 49 , 153 , 311 ) ;
31
+
32
+ // Add dates along the y axis
33
+ var y = indicator . addCategoryAxis ( "y" , "Month" ) ;
34
+ y . addOrderRule ( "Date" , "Desc" ) ;
35
+
36
+ // Use sales for bar size and hide the axis
37
+ var x = indicator . addMeasureAxis ( "x" , "Unit Sales" ) ;
38
+ x . hidden = true ;
39
+
40
+ // Add the bars to the indicator and add event handlers
41
+ var s = indicator . addSeries ( null , dimple . plot . bar ) ;
42
+ s . addEventHandler ( "click" , onClick ) ;
43
+ // Draw the side chart
44
+ indicator . draw ( ) ;
45
+
46
+ // Remove the title from the y axis
47
+ y . titleShape . remove ( ) ;
48
+
49
+ // Remove the lines from the y axis
50
+ y . shapes . selectAll ( "line,path" ) . remove ( ) ;
51
+
52
+ // Move the y axis text inside the plot area
53
+ y . shapes . selectAll ( "text" )
54
+ . style ( "text-anchor" , "start" )
55
+ . style ( "font-size" , "11px" )
56
+ . attr ( "transform" , "translate(18, 0.5)" ) ;
57
+
58
+ // This block simply adds the legend title. I put it into a d3 data
59
+ // object to split it onto 2 lines. This technique works with any
60
+ // number of lines, it isn't dimple specific.
61
+ svg . selectAll ( "title_text" )
62
+ . data ( [ "Click bar to select" ,
63
+ "and pause. Click again" ,
64
+ "to resume animation" ] )
65
+ . enter ( )
66
+ . append ( "text" )
67
+ . attr ( "x" , 435 )
68
+ . attr ( "y" , function ( d , i ) { return 15 + i * 12 ; } )
69
+ . style ( "font-family" , "sans-serif" )
70
+ . style ( "font-size" , "10px" )
71
+ . style ( "color" , "Black" )
72
+ . text ( function ( d ) { return d ; } ) ;
73
+
74
+ // Manually set the bar colors
75
+ s . shapes
76
+ . attr ( "rx" , 10 )
77
+ . attr ( "ry" , 10 )
78
+ . style ( "fill" , function ( d ) { return ( d . y === 'Jan-12' ? indicatorColor . fill : defaultColor . fill ) } )
79
+ . style ( "stroke" , function ( d ) { return ( d . y === 'Jan-12' ? indicatorColor . stroke : defaultColor . stroke ) } )
80
+ . style ( "opacity" , 0.4 ) ;
81
+
82
+ // Draw the main chart
83
+ var bubbles = new dimple . chart ( svg , data ) ;
84
+ bubbles . setBounds ( 60 , 50 , 355 , 310 )
85
+ bubbles . addMeasureAxis ( "x" , "Distribution" ) ;
86
+ bubbles . addMeasureAxis ( "y" , "Price" ) ;
87
+ bubbles . addSeries ( [ "SKU" , "Channel" , "Owner" ] , dimple . plot . bubble )
88
+ bubbles . addLegend ( 60 , 10 , 410 , 60 ) ;
89
+
90
+ // Add a storyboard to the main chart and set the tick event
91
+ var story = bubbles . setStoryboard ( "Month" , onTick ) ;
92
+ // Change the frame duration
93
+ story . frameDuration = frame ;
94
+ // Order the storyboard by date
95
+ story . addOrderRule ( "Date" ) ;
96
+
97
+ // Draw the bubble chart
98
+ bubbles . draw ( ) ;
99
+
100
+ // Orphan the legends as they are consistent but by default they
101
+ // will refresh on tick
102
+ bubbles . legends = [ ] ;
103
+ // Remove the storyboard label because the chart will indicate the
104
+ // current month instead of the label
105
+ story . storyLabel . remove ( ) ;
106
+
107
+ // On click of the side chart
108
+ function onClick ( e ) {
109
+ // Pause the animation
110
+ story . pauseAnimation ( ) ;
111
+ // If it is already selected resume the animation
112
+ // otherwise pause and move to the selected month
113
+ if ( e . yValue === story . getFrameValue ( ) ) {
114
+ story . startAnimation ( ) ;
115
+ } else {
116
+ story . goToFrame ( e . yValue ) ;
117
+ story . pauseAnimation ( ) ;
118
+ }
119
+ }
120
+
121
+ // On tick of the main charts storyboard
122
+ function onTick ( e ) {
123
+ if ( ! firstTick ) {
124
+ // Color all shapes the same
125
+ s . shapes
126
+ . transition ( )
127
+ . duration ( frame / 2 )
128
+ . style ( "fill" , function ( d ) { return ( d . y === e ? indicatorColor . fill : defaultColor . fill ) } )
129
+ . style ( "stroke" , function ( d ) { return ( d . y === e ? indicatorColor . stroke : defaultColor . stroke ) } ) ;
130
+ }
131
+ firstTick = false ;
132
+ }
133
+ } ) ;
138
134
</ script >
139
135
</ div >
0 commit comments