3 <title>Chart 2D</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <style type="text/css">
6 @import "../../../dojo/resources/dojo.css";
7 @import "../../../dijit/tests/css/dijitTests.css";
10 The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
11 <script type="text/javascript" src="Silverlight.js"></script>
13 <script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
14 <script type="text/javascript" src="../../lang/functional.js"></script>
15 <script type="text/javascript" src="../../lang/utils.js"></script>
16 <script type="text/javascript" src="../Theme.js"></script>
17 <script type="text/javascript" src="../scaler.js"></script>
18 <script type="text/javascript" src="../Element.js"></script>
19 <script type="text/javascript" src="../axis2d/common.js"></script>
20 <script type="text/javascript" src="../axis2d/Base.js"></script>
21 <script type="text/javascript" src="../axis2d/Default.js"></script>
22 <script type="text/javascript" src="../plot2d/common.js"></script>
23 <script type="text/javascript" src="../plot2d/Base.js"></script>
24 <script type="text/javascript" src="../plot2d/Default.js"></script>
25 <script type="text/javascript" src="../plot2d/Lines.js"></script>
26 <script type="text/javascript" src="../plot2d/Areas.js"></script>
27 <script type="text/javascript" src="../plot2d/Markers.js"></script>
28 <script type="text/javascript" src="../plot2d/MarkersOnly.js"></script>
29 <script type="text/javascript" src="../plot2d/Scatter.js"></script>
30 <script type="text/javascript" src="../plot2d/Stacked.js"></script>
31 <script type="text/javascript" src="../plot2d/StackedLines.js"></script>
32 <script type="text/javascript" src="../plot2d/StackedAreas.js"></script>
33 <script type="text/javascript" src="../plot2d/Columns.js"></script>
34 <script type="text/javascript" src="../plot2d/StackedColumns.js"></script>
35 <script type="text/javascript" src="../plot2d/ClusteredColumns.js"></script>
36 <script type="text/javascript" src="../plot2d/Bars.js"></script>
37 <script type="text/javascript" src="../plot2d/StackedBars.js"></script>
38 <script type="text/javascript" src="../plot2d/ClusteredBars.js"></script>
39 <script type="text/javascript" src="../plot2d/Grid.js"></script>
40 <script type="text/javascript" src="../plot2d/Pie.js"></script>
41 <script type="text/javascript" src="../Chart2D.js"></script>
42 <script type="text/javascript">
44 dojo.require("dojox.charting.Chart2D");
45 dojo.require("dojox.charting.themes.PlotKit.blue");
46 dojo.require("dojox.charting.themes.PlotKit.cyan");
47 dojo.require("dojox.charting.themes.PlotKit.green");
48 dojo.require("dojox.charting.themes.PlotKit.orange");
49 dojo.require("dojox.charting.themes.PlotKit.purple");
50 dojo.require("dojox.charting.themes.PlotKit.red");
51 dojo.require("dojox.charting.themes.ET.greys");
53 makeObjects = function(){
54 var chart1 = new dojox.charting.Chart2D("test1");
55 chart1.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
56 chart1.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
59 var chart2 = new dojox.charting.Chart2D("test2");
60 chart2.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {stroke: "red"});
61 chart2.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: "blue"});
64 var chart3 = new dojox.charting.Chart2D("test3");
65 chart3.addPlot("default", {type: "Areas", tension:2.5});
66 chart3.setTheme(dojox.charting.themes.PlotKit.orange);
67 chart3.addSeries("Series A", [1, 2, 0.5, 1.5, 1, 2.8, 0.4]);
68 chart3.addSeries("Series B", [2.6, 1.8, 2, 1, 1.4, 0.7, 2]);
69 chart3.addSeries("Series C", [6.3, 1.8, 3, 0.5, 4.4, 2.7, 2]);
72 var chart4 = new dojox.charting.Chart2D("test4");
73 chart4.addPlot("default", {type: "Areas"});
74 chart4.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {stroke: {color: "red", width: 2}, fill: "lightpink"});
75 chart4.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: {color: "blue", width: 2}, fill: "lightblue"});
78 var chart5 = new dojox.charting.Chart2D("test5");
79 chart5.setTheme(dojox.charting.themes.PlotKit.blue);
81 chart5.addAxis("y", {vertical: true});
82 chart5.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
83 chart5.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
86 var chart6 = new dojox.charting.Chart2D("test6");
87 chart6.setTheme(dojox.charting.themes.PlotKit.cyan);
88 chart6.addAxis("x", {fixLower: "minor", fixUpper: "minor"});
89 chart6.addAxis("y", {vertical: true, fixLower: "minor", fixUpper: "minor"});
90 chart6.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
91 chart6.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
94 var chart7 = new dojox.charting.Chart2D("test7");
95 chart7.setTheme(dojox.charting.themes.PlotKit.green);
96 chart7.addAxis("x", {fixLower: "major", fixUpper: "major"});
97 chart7.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major"});
98 chart7.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
99 chart7.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
102 var chart8 = new dojox.charting.Chart2D("test8");
103 chart8.setTheme(dojox.charting.themes.PlotKit.purple);
104 chart8.addPlot("default", {type: "Markers"});
105 chart8.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {min: 0, max: 3});
106 chart8.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
109 var chart9 = new dojox.charting.Chart2D("test9");
110 chart9.addPlot("default", {type: "MarkersOnly"});
111 chart9.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {min: 0, max: 3, stroke: {color: "red", width: 2}, marker: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0"});
112 chart9.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: {color: "blue", width: 2}, marker: "m-3,-3 l0,6 6,0 0,-6 z"});
115 var chart10 = new dojox.charting.Chart2D("test10");
116 chart10.addPlot("default", {type: "Markers", shadows: {dx: 2, dy: 2, dw: 2}});
117 chart10.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {min: 0, max: 3, stroke: {color: "red", width: 2, join: "round"}, marker: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0"});
118 chart10.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: {color: "blue", width: 2, join: "round"}, marker: "m-3,-3 l0,6 6,0 0,-6 z"});
121 var chart11 = new dojox.charting.Chart2D("test11");
122 chart11.addPlot("default", {type: "StackedLines", markers: true, tension:3, shadows: {dx: 2, dy: 2, dw: 2}});
123 chart11.addSeries("Series A", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "red", width: 2}, fill: "lightpink", marker: "m-3,-3 l0,6 6,0 0,-6 z"});
124 chart11.addSeries("Series B", [1, 1.6, 1.3, 1.4, 1.1, 1.5, 1.1], {stroke: {color: "blue", width: 2}, fill: "lightblue", marker: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0"});
125 chart11.addSeries("Series C", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "green", width: 2}, fill: "lightgreen", marker: "m0,-3 l3,3 -3,3 -3,-3 z"});
128 var chart12 = new dojox.charting.Chart2D("test12");
129 chart12.addAxis("x", {fixLower: "major", fixUpper: "major"});
130 chart12.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major"});
131 chart12.addPlot("default", {type: "StackedAreas", tension:3});
132 chart12.addSeries("Series A", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "red", width: 2}, fill: "lightpink"});
133 chart12.addSeries("Series B", [1, 1.6, 1.3, 1.4, 1.1, 1.5, 1.1], {stroke: {color: "blue", width: 2}, fill: "lightblue"});
134 chart12.addSeries("Series C", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "green", width: 2}, fill: "lightgreen"});
137 var chart13 = new dojox.charting.Chart2D("test13");
138 chart13.addPlot("default", {type: "Columns"});
139 chart13.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
140 chart13.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
143 var chart14 = new dojox.charting.Chart2D("test14");
144 chart14.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major"});
145 chart14.addPlot("default", {type: "Columns", gap: 2});
146 chart14.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
147 chart14.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
150 var chart15 = new dojox.charting.Chart2D("test15");
151 chart15.addPlot("default", {type: "StackedColumns"});
152 chart15.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
153 chart15.addSeries("Series B", [2, 1, 2, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
156 var chart16 = new dojox.charting.Chart2D("test16");
157 chart16.addAxis("x", {fixLower: "major", fixUpper: "major", includeZero: true});
158 chart16.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", natural: true});
159 chart16.addPlot("default", {type: "Bars"});
160 chart16.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
161 chart16.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
164 var chart17 = new dojox.charting.Chart2D("test17");
165 chart17.addPlot("default", {type: "StackedBars"});
166 chart17.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
167 chart17.addSeries("Series B", [2, 1, 2, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
170 var chart18 = new dojox.charting.Chart2D("test18");
171 chart18.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
172 chart18.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", includeZero: true});
173 chart18.addPlot("default", {type: "ClusteredColumns", gap: 10});
174 chart18.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
175 chart18.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
178 var chart19 = new dojox.charting.Chart2D("test19");
179 chart19.addAxis("x", {fixLower: "major", fixUpper: "major", includeZero: true});
180 chart19.addAxis("y", {vertical: true, fixLower: "minor", fixUpper: "minor", natural: true});
181 chart19.addPlot("default", {type: "ClusteredBars", gap: 5});
182 chart19.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
183 chart19.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
186 var chart20 = new dojox.charting.Chart2D("test20");
187 chart20.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
188 chart20.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", minorTicks: false, includeZero: true});
189 chart20.addPlot("front_grid", {type: "Grid", hMajorLines: true, vMajorLines: false});
190 chart20.addPlot("default", {type: "Columns", gap: 10});
191 chart20.addPlot("back_grid", {type: "Grid", hMajorLines: false, vMajorLines: true});
192 chart20.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
193 chart20.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
196 var chart21 = new dojox.charting.Chart2D("test21");
197 chart21.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
198 chart21.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major",
199 includeZero: true, min: 0, max: 8, minorLabels: false,
200 majorTicks: true, minorTicks: true, microTicks: false,
201 majorTickStep: 2, minorTickStep: 1, microTickStep: 0.5});
202 chart21.addPlot("front_grid", {type: "Grid", hMajorLines: true, vMajorLines: false});
203 chart21.addPlot("default", {type: "Columns", gap: 10});
204 chart21.addPlot("back_grid", {type: "Grid", hMajorLines: false, vMajorLines: true});
205 chart21.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
206 chart21.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
209 var chart22 = new dojox.charting.Chart2D("test22");
210 chart22.addAxis("x");
211 chart22.addAxis("y", {vertical: true});
212 chart22.addPlot("default", {type: "Columns", gap: 10});
213 chart22.addPlot("grid", {type: "Grid"});
214 chart22.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
215 chart22.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
218 var chart23 = new dojox.charting.Chart2D("test23");
219 chart23.addAxis("x");
220 chart23.addAxis("y", {vertical: true});
221 chart23.addPlot("default", {type: "ClusteredColumns", gap: 10});
222 chart23.addPlot("grid", {type: "Grid"});
223 chart23.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
224 chart23.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
225 chart23.addSeries("Series C", [1, 0.5, -1, -2, -3], {stroke: {color: "green"}, fill: "lightgreen"});
228 var chart24 = new dojox.charting.Chart2D("test24");
229 chart24.addAxis("x");
230 chart24.addAxis("y", {vertical: true});
231 chart24.addPlot("default", {type: "Bars", gap: 10});
232 chart24.addPlot("grid", {type: "Grid"});
233 chart24.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
234 chart24.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
237 var chart25 = new dojox.charting.Chart2D("test25");
238 chart25.addAxis("x");
239 chart25.addAxis("y", {vertical: true});
240 chart25.addPlot("default", {type: "ClusteredBars", gap: 10});
241 chart25.addPlot("grid", {type: "Grid"});
242 chart25.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
243 chart25.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
244 chart25.addSeries("Series C", [1, 0.5, -1, -2, -3], {stroke: {color: "green"}, fill: "lightgreen"});
247 var chart26 = new dojox.charting.Chart2D("test26");
248 chart26.setTheme(dojox.charting.themes.PlotKit.red);
249 chart26.addAxis("x", {min: 0, max: 6, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
250 chart26.addAxis("y", {vertical: true, min: 0, max: 10, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
251 chart26.addSeries("Series A", [{x: 0.5, y: 5}, {x: 1.5, y: 1.5}, {x: 2, y: 9}, {x: 5, y: 0.3}]);
252 chart26.addSeries("Series B", [{x: 0.3, y: 8}, {x: 4, y: 6}, {x: 5.5, y: 2}]);
255 var chart27 = new dojox.charting.Chart2D("test27");
256 chart27.setTheme(dojox.charting.themes.PlotKit.purple);
257 chart27.addPlot("default", {type: "Scatter"});
258 chart27.addAxis("x", {min: 0, max: 6, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
259 chart27.addAxis("y", {vertical: true, min: 0, max: 10, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
260 chart27.addSeries("Series A", [{x: 0.5, y: 5}, {x: 1.5, y: 1.5}, {x: 2, y: 9}, {x: 5, y: 0.3}]);
261 chart27.addSeries("Series B", [{x: 0.3, y: 8}, {x: 4, y: 6}, {x: 5.5, y: 2}]);
264 var chart28 = new dojox.charting.Chart2D("test28");
265 chart28.setTheme(dojox.charting.themes.PlotKit.blue);
266 chart28.addPlot("default", {type: "Default", lines: true, markers: true, tension:2});
267 chart28.addAxis("x", {min: 0, max: 6, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
268 chart28.addAxis("y", {vertical: true, min: 0, max: 10, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
269 chart28.addSeries("Series A", [{x: 0.5, y: 5}, {x: 1.5, y: 1.5}, {x: 2, y: 9}, {x: 5, y: 0.3}]);
270 chart28.addSeries("Series B", [{x: 0.3, y: 8}, {x: 4, y: 6}, {x: 5.5, y: 2}]);
273 var chart29 = new dojox.charting.Chart2D("test29");
274 chart29.setTheme(dojox.charting.themes.ET.greys);
275 chart29.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
276 chart29.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", includeZero: true});
277 chart29.addPlot("default", {type: "ClusteredColumns", gap: 10});
278 chart29.addSeries("Series A", [2, 1, 0.5, -1, -2] );
279 chart29.addSeries("Series B", [-2, -1, -0.5, 1, 2] );
280 chart29.addSeries("Series C", [1, 0.5, -1, -2, -3] );
281 chart29.addSeries("Series D", [0.7, 1.5, -1.2, -1.25, 3] );
286 dojo.addOnLoad(makeObjects);
292 <!--<p><button onclick="makeObjects();">Go</button></p>-->
293 <p>1: Defaults: lines, no axes.</p>
294 <div id="test1" style="width: 400px; height: 200px;"></div>
295 <p>2: Defaults: lines, no axes, and custom strokes.</p>
296 <div id="test2" style="width: 200px; height: 200px;"></div>
297 <p>3: Areas, orange theme, no axes.</p>
298 <div id="test3" style="width: 400px; height: 400px;"></div>
299 <p>4: Areas, no axes, custom strokes and fills.</p>
300 <div id="test4" style="width: 400px; height: 200px;"></div>
301 <p>5: Lines, axes, blue theme.</p>
302 <div id="test5" style="width: 400px; height: 200px;"></div>
303 <p>6: Lines, axes (aligned on minor ticks), cyan theme.</p>
304 <div id="test6" style="width: 400px; height: 200px;"></div>
305 <p>7: Lines, axes (aligned on major ticks), green theme.</p>
306 <div id="test7" style="width: 400px; height: 200px;"></div>
307 <p>8: Lines and markers, no axes, purple theme, custom min/max.</p>
308 <div id="test8" style="width: 400px; height: 200px;"></div>
309 <p>9: Markers only, no axes, custom theme, custom markers, custom min/max.</p>
310 <div id="test9" style="width: 400px; height: 200px;"></div>
311 <p>10: Lines and markers, shadows, no axes, custom theme, custom markers, custom min/max.</p>
312 <div id="test10" style="width: 400px; height: 200px;"></div>
313 <p>11: Stacked lines, markers, shadows, no axes, custom strokes, fills, and markers.</p>
314 <div id="test11" style="width: 200px; height: 200px;"></div>
315 <p>12: Stacked areas, axes (aligned on major ticks), custom strokes and fills.</p>
316 <div id="test12" style="width: 400px; height: 200px;"></div>
317 <p>13: Columns, no axes, custom strokes and fills.</p>
318 <div id="test13" style="width: 400px; height: 200px;"></div>
319 <p>14: Columns with gaps beetwen them, vertical axis aligned on major ticks, custom strokes, fills.</p>
320 <div id="test14" style="width: 400px; height: 200px;"></div>
321 <p>15: Stacked columns, no axes, custom strokes and fills.</p>
322 <div id="test15" style="width: 400px; height: 200px;"></div>
323 <p>16: Bars, axes aligned on major ticks, no minor ticks, custom strokes and fills.</p>
324 <div id="test16" style="width: 400px; height: 200px;"></div>
325 <p>17: Stacked bars, no axes, custom strokes and fills.</p>
326 <div id="test17" style="width: 400px; height: 200px;"></div>
327 <p>18: Clustered columns, custom axes, custom strokes, fills, and gap.</p>
328 <div id="test18" style="width: 400px; height: 200px;"></div>
329 <p>19: Clustered bars, custom axes, custom strokes, fills, and gap.</p>
330 <div id="test19" style="width: 400px; height: 200px;"></div>
331 <p>20: Columns with gaps beetwen them, grids, custom strokes, fills, axes.</p>
332 <div id="test20" style="width: 400px; height: 200px;"></div>
333 <p>21: Columns with gaps beetwen them, grids, custom strokes, fills, axes, with min=0, max=8, and manually specified ticks on the vertical axis.</p>
334 <div id="test21" style="width: 400px; height: 200px;"></div>
335 <p>22: Columns with positive and negative values, axes, and grid.</p>
336 <div id="test22" style="width: 400px; height: 200px;"></div>
337 <p>23: Clustered columns with positive and negative values, axes, and grid.</p>
338 <div id="test23" style="width: 400px; height: 200px;"></div>
339 <p>24: Bars with positive and negative values, axes, and grid.</p>
340 <div id="test24" style="width: 400px; height: 200px;"></div>
341 <p>25: Clustered bars with positive and negative values, axes, and grid.</p>
342 <div id="test25" style="width: 400px; height: 200px;"></div>
343 <p>26: Default lines with 2D data, custom axis, red theme.</p>
344 <div id="test26" style="width: 400px; height: 200px;"></div>
345 <p>27: Scatter chart, custom axis, purple theme.</p>
346 <div id="test27" style="width: 400px; height: 200px;"></div>
347 <p>28: Markers, lines, 2D data, custom axis, blue theme.</p>
348 <div id="test28" style="width: 400px; height: 200px;"></div>
349 <p>29: Clustered columns with positive and negative values, readable theme.</p>
350 <div id="test29" style="width: 500px; height: 300px;"></div>
351 <p>That's all Folks!</p>