2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" lang=
"en" xml:
lang=
"en" >
5 <title>PlotKit Quick Start | liquidx
</title>
6 <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8" />
7 <link href=
"http://media.liquidx.net/css/x_general.css" media=
"screen" rel=
"Stylesheet" type=
"text/css" />
8 <link href=
"http://media.liquidx.net/css/x_header.css" media=
"screen" rel=
"Stylesheet" type=
"text/css" />
9 <link href=
"http://media.liquidx.net/css/x_layout.css" media=
"screen" rel=
"Stylesheet" type=
"text/css" />
10 <link href=
"http://media.liquidx.net/css/x_blocks.css" media=
"screen" rel=
"Stylesheet" type=
"text/css" />
11 <link rel=
"icon" href=
"/favicon.png" type=
"image/x-png">
12 <link rel=
"shortcut icon" href=
"/favicon.png" type=
"image/x-png">
14 <script defer
type=
"text/javascript" src=
"http://media.liquidx.net/js/pngfix.js"></script>
17 <script type=
"text/javascript" src=
"/js/mochi/MochiKit.js"></script>
18 <script type=
"text/javascript" src=
"/js/plotkit/Base.js"></script>
19 <script type=
"text/javascript" src=
"/js/plotkit/Layout.js"></script>
20 <script type=
"text/javascript" src=
"/js/plotkit/Canvas.js"></script>
21 <script type=
"text/javascript" src=
"/js/plotkit/SweetCanvas.js"></script>
22 <link href=
"doc.css" media=
"screen" rel=
"stylesheet" type=
"text/css" />
28 <div id=
"logo"><a href=
"http://www.liquidx.net/"><img src=
"http://media.liquidx.net/imgx/logo.png" width=
"256" height=
"128" alt=
"liquidx.net" /></a></div>
30 <div id=
"menu-l"><img src=
"http://media.liquidx.net/imgx/menu_l.png" width=
"17" height=
"28" alt=
"menu cap" /></div><div id=
"menu-r"><img src=
"http://media.liquidx.net/imgx/menu_r.png" width=
"17" height=
"28" alt=
"menu cap" /></div>
32 <ul id=
"menu" class=
"code">
33 <li class=
"tab" id=
"blog"><a href=
"http://www.liquidx.net/" title=
"blog/home">blog
</a></li>
34 <li class=
"tab" id=
"code"><a href=
"http://www.liquidx.net/code/" title=
"software i have written">software
</a></li>
35 <li class=
"tab" id=
"dev"><a href=
"http://projects.liquidx.net/" title=
"source code for my open source projects">dev
</a></li>
36 <li class=
"tab" id=
"photos"><a href=
"http://al.tse.id.au/gallery/" title=
"photos and videos">photos
</a></li>
37 <li class=
"tab" id=
"research"><a href=
"http://al.tse.id.au/research/" title=
"research profile">research
</a></li>
38 <li class=
"tab" id=
"links"><a href=
"http://www.liquidx.net/links/" title=
"my bookmarks">linkblog
</a></li>
39 <li class=
"tab" id=
"stats"><a href=
"http://stats.liquidx.net/" title=
"stats for various parts of my website">stats
</a></li>
40 <li class=
"tab" id=
"status"><a href=
"http://www.liquidx.net/status/" title=
"weather report for alastair">status
</a></li>
41 <li class=
"tab" id=
"about"><a href=
"http://al.tse.id.au/" title=
"about alastair tse">aboutme
</a></li>
45 <div id=
"quickbuttons">
46 <span class=
"quickbutton"><a href=
"http://www.liquidx.net/albumartwidget/"><img src=
"http://media.liquidx.net/imgx/quick_widget.png" alt=
"album art widget" /></a></span>
47 <span class=
"quickbutton"><a href=
"http://www.liquidx.net/plotkit/"><img src=
"http://media.liquidx.net/imgx/quick_plotkit.png" alt=
"plotkit" /></a></span>
48 <span class=
"quickbutton"><a href=
"http://www.liquidx.net/fruity/"><img src=
"http://media.liquidx.net/imgx/quick_fruity.png" alt=
"fruity" /></a></span>
54 <div class=
"page doc">
57 <h1> PlotKit Quick Start
</h1>
58 <p>This is just a quick guide on how to get started with PlotKit. If you
59 want to delve in deeper, be sure to check out the
60 <a href=
"PlotKit.html">documentation
</a>.
63 <h1> Canvas or SVG
</h1>
64 <p>Before we start, you should know a little about HTML Canvas and SVG
65 support in the real browser world. For a more indepth coverage, please
66 check the
<a href=
"SVGCanvasCompat.html">SVG/Canvas Browser Support Status
</a>.
68 <p>Basically, Canvas and SVG have similar support across modern
69 browsers. Canvas is supported by Opera
9, Safari
2 and Firefox
1.5,
70 which probably only accounts for
10% of browsers. PlotKit also supports
71 a degraded Emulated Canvas mode under IE which means you can achieve
72 nearly
90% browser support using this technology.
74 <p>However, the future is in SVG where Firefox
1.5 and Opera
8 have
75 support it, and IE6 with the Adobe SVG Viewer (ASV) install means you
76 get around the same coverage as HTML Canvas.
78 <p>PlotKit plans to support both to maximise compatiblity. Canvas has a
79 simplier rendering engine, but can do the equivalent to what SVG can
80 apart from animation. SVG has wider support, but is more complex and
81 support for key features varies widely across different
85 <h1> Graphing with Canvas
</h1>
86 <p>Download the latest
<a href=
"http://www.liquidx.net/plotkit/">PlotKit
</a> and
<a href=
"http://www.mochikit.com/">MochiKit
</a> and extract it on to
87 your web server and make sure
<code>plotkit-
0.8/PlotKit
</code> and
88 <code>mochikit/MochiKit
</code> is visible.
91 <h2> Preparing the HTML
</h2>
92 <p>Add the script headers for PlotKit to work.
94 <pre><code><script type=
"text/javascript
" src=
"/mochikit/MochiKit.js
"></script
>
95 <script type=
"text/javascript
" src=
"/plotkit/Base.js
"></script
>
96 <script type=
"text/javascript
" src=
"/plotkit/Layout.js
"></script
>
97 <script type=
"text/javascript
" src=
"/plotkit/Canvas.js
"></script
>
98 <script type=
"text/javascript
" src=
"/plotkit/SweetCanvas.js
"></script
>
99 </code></pre><p>MochiKit.js is an autoloader for all the elements of MochiKit. You can
100 reduce the size of it by making your own packed version or just
101 including the script headers individually.
103 <p>The other four PlotKit javascript files deal with some basic
104 functionality, the layout engine and two renderers, Canvas and
107 <p>Now we add the
<code><canvas
></code> tag to where we want the graph to
108 appear. Note PlotKit
<strong>requires
</strong> the
<code><canvas
></code> tag is enclosed
109 inside a
<div> tags for labels to work.
111 <pre><code> <div
><canvas id=
"graph
" height=
"300" width=
"300"></canvas
></div
>
112 </code></pre><p>This will create a blank canvas of
300 by
300 pixels.
116 <p>There are only two simple steps to draw a chart, first is the create a
117 layout with our data and second is to create the renderer. So lets
118 start off with creating the layout.
121 <h3> Layout and Data
</h3>
122 <pre><code>var layout = new PlotKit.Layout(
"bar
", {});
123 layout.addDataset(
"sqrt
", [[
0,
0], [
1,
1], [
2,
1.414], [
3,
1.73], [
4,
2]]);
125 </code></pre><p>There, it is that simple. Lets explain what each line is doing:
128 <li><p> <code>var layout = new PlotKit.Layout(
"bar
", {});
</code>
130 <p>We create a new layout object, and tell it that we want a bar chart in the first parameter. The second parameter allows us to pass additional options, which we will go on to later. It can be left null, or in this case just an empty array.
135 <li><p> <code>layout.addDataset(
"sqrt
", [[
0,
0], [
1,
1]...)
</code>
137 <p>This will add a new dataset to the layout. You can add multiple datasets by specifying a different name in the first parameter for each dataset. The dataset consists of an array of (x, y) values. These must be numeric, either floating point or integers.
139 <p>Note that PlotKit does not deal with negative numbers at the moment.
144 <li><p> <code>layout.evaluate();
</code>
146 <p>This will be the last command you make on the layout before passing it to the renderer. This will tell the layout to calculate the layout of the chart so the renderer can draw it. It is an expensive operation, so do not call it frequently, only unless the data or options have been changed.
153 <pre><code> var canvas = MochiKit.DOM.getElement(
"graph
");
154 var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, {});
157 <li><p> <code>var canvas = MochiKit.DOM.getElement(
"graph
");
</code>
159 <p>This line will get the HTML element we defined earlier.
164 <li><p> <code>var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, {});
</code>
166 <p>This will create the renderer to work on the object passed, and also with the data in the layout we created earlier. Again, the third parameter here is for options to relates to the look of the graph. We will show you some things you can do with this in the following section.
171 <li><p> <code>plotter.render()
</code>
173 <p>This line will render the graph.
179 <h3> Putting it altogether
</h3>
180 <pre><code>function drawGraph() {
181 var layout = new PlotKit.Layout(
"bar
", {});
182 layout.addDataset(
"sqrt
", [[
0,
0], [
1,
1], [
2,
1.414], [
3,
1.73], [
4,
2]]);
184 var canvas = MochiKit.DOM.getElement(
"graph
");
185 var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, {});
188 MochiKit.DOM.addLoadEvent(drawGraph);
189 </code></pre><p>This is a sample of what you would use to plot the graph of sqare roots for
0 to
4. Make sure you plot the graph on the load event because the DOM will not be ready if when the Javascript is first loaded.
191 <p>See this in an [HTML example here][example1].
194 <h3> Additional Options
</h3>
195 <p>We mentioned that both the layout and renderer may take some additional options. In order to take advantage of that, we can use a simple options dictionary to store options for both layout and the renderer, in this way:
197 <pre><code>var options = {
198 "IECanvasHTC
":
"/plotkit/iecanvas.htc
",
199 "colorScheme
": PlotKit.Base.palette(PlotKit.Base.baseColors()[
0]),
200 "padding
": {left:
0, right:
0, top:
10, bottom:
30},
201 "xTicks
": [{v:
0, label:
"zero
"},
202 {v:
1, label:
"one
"},
203 {v:
2, label:
"two
"},
204 {v:
3, label:
"three
"},
205 {v:
4, label:
"four
"}],
206 "drawYAxis
": false
209 function drawGraph() {
210 var layout = new PlotKit.Layout(
"bar
", options);
211 layout.addDataset(
"sqrt
", [[
0,
0], [
1,
1], [
2,
1.414], [
3,
1.73], [
4,
2]]);
213 var canvas = MochiKit.DOM.getElement(
"graph
");
214 var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, options);
217 MochiKit.DOM.addLoadEvent(drawGraph);
218 </code></pre><p>Here we define some additional options to affect how our graph is rendered.
222 First line defines where the
<code>IECanvasHTC
</code> behaviour file is so that we can have IE support.
226 Second line defines a new colorScheme to use. Here we are just using another preset color scheme that creates a palette out of the
6th preset base colour.
230 Third line defines some custom labels we would like by giving the mapping from X value to label.
234 Fourth line tells the renderer not to draw the Y axis.
238 <h1> Demonstration
</h1>
239 <p>To show you that is how it works, below is the graph defined exactly how it is presented in this quick start guide. On the left is a PNG of what you should expect and on the right is what it actually renders to.
244 <div style=
"float: left; padding-right: 5px;" width=
"300" height=
"300"><img src=
"barsample.png" width=
"300" height=
"300" alt=
"screenshot of graph" /></div>
245 <div style=
"float: left; padding-left: 5px;" width=
"300" height=
"300"><canvas id=
"bargraph" width=
"300" height=
"300"></canvas></div>
246 <div style=
"clear: both; height: 1px; width: 1px;"> 
</div>
252 <div style=
"float: left; padding-right: 5px;" width=
"300" height=
"300"><img src=
"piesample.png" width=
"300" height=
"300" alt=
"screenshot of graph" /></div>
253 <div style=
"float: left; padding-left: 5px;" width=
"300" height=
"300"><canvas id=
"piegraph" width=
"300" height=
"300"></canvas></div>
254 <div style=
"clear: both; height: 1px; width: 1px;"> 
</div>
259 <p>Alastair Tse - Last Updated:
17th March
2006
264 <script type=
"text/javascript">
268 "IECanvasHTC":
"../plotkit/iecanvas.htc",
269 "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[
0]),
270 "padding": {left:
10, right:
10, top:
10, bottom:
30},
271 "xTicks": [{v:
0, label:
"zero"},
274 {v:
3, label:
"three"},
275 {v:
4, label:
"four"}],
281 function drawBarGraph() {
282 var layout = new PlotKit.Layout(
"bar", options);
283 layout.addDataset(
"sqrt", [[
0,
0], [
1,
1], [
2,
1.414], [
3,
1.73], [
4,
2]]);
285 var canvas = MochiKit.DOM.getElement(
"bargraph");
286 var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, options);
289 MochiKit.DOM.addLoadEvent(drawBarGraph);
291 function drawPieGraph() {
292 var layout = new PlotKit.Layout(
"pie", options);
293 layout.addDataset(
"sqrt", [[
0,
0], [
1,
1], [
2,
1.414], [
3,
1.73], [
4,
2]]);
295 var canvas = MochiKit.DOM.getElement(
"piegraph");
296 var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, options);
300 // Damn opera
9 has a bug with javascript subclassing??
301 // but works in sweet.html, grr!!
302 if (navigator.userAgent.toLowerCase().indexOf(
"opera") == -
1) {
303 MochiKit.DOM.addLoadEvent(drawPieGraph);
315 <h3>Syndication Feeds:
</h3>
318 <li><a href=
"http://www.liquidx.net/blog/feed/atom/" class=
"feed" title=
"feed for all posts on liquidx.net"><img src=
"http://media.liquidx.net/imgx/feed.gif" class=
"feed" alt=
"feed" />Atom Feed for the Blog Entries
</a></li>
319 <li><a href=
"http://www.liquidx.net/blog/feed/rss/" class=
"feed" title=
"feed for all posts on liquidx.net"><img src=
"http://media.liquidx.net/imgx/feed.gif" class=
"feed" alt=
"feed" />RSS Feed for the Blog Entries
</a></li>
320 <li><a href=
"http://www.liquidx.net/comments/feed/atom/" class=
"feed" title=
"feed for all posts on liquidx.net"><img src=
"http://media.liquidx.net/imgx/feed.gif" class=
"feed" alt=
"feed" />Feed for All Comments
</a></li>
321 <li><a href=
"http://www.liquidx.net/links/feed/atom/" class=
"feed" title=
"feed for all bookmarked links"><img src=
"http://media.liquidx.net/imgx/feed.gif" class=
"feed" alt=
"feed" />Feed for Links
</a></li>
326 <h3>About this site:
</h3>
327 <p>Content on this site is licensed under
<a href=
"http://creativecommons.org/licenses/by/2.5/">CC By Attribution
</a> unless otherwise specified.
328 Copyright (c)
2002-
2006,
<a href=
"http://al.tse.id.au/">Alastair Tse
</a>.
</p>
329 <p>For more information, see
<a href=
"http://al.tse.id.au/">al.tse.id.au
</a>.
</p>
330 <p><script type=
"text/javascript" src=
"http://technorati.com/embed/itwctkzez.js"></script></p>
333 <h3>Is Made Possible By:
</h3>
336 <dt><a href=
"http://ecto.kung-foo.tv/" class=
"clean">ecto
</a>.
</dt>
337 <dd>Blogging client for Mac
</dd>
338 <dt><a href=
"http://djangoproject.com/" class=
"clean">Django
</a>.
</dt>
339 <dd>Python Web Framework
</dd>
340 <dt><a href=
"http://www.lighttpd.net/" class=
"clean">lighttpd
</a>.
</dt>
341 <dd>Really Fast Web Server
</dd>
342 <dt><a href=
"http://www.saddi.com/software/flup/" class=
"clean">flup
</a>.
</dt>
343 <dd>FastCGI for Python
</dd>
348 <h3>Search My Sites:
</h3>
350 <div style='margin:
10px; text-align: center; width:
160px;'
><form action='http://www.rollyo.com/search.html'
><fieldset style='margin:
0; padding:
4px
0 0 0; height:
60px; border: none; background: url(http://rollyo.com/remote/togo-bg4.png) no-repeat top left;'
><div style=
"position: absolute; float:left; z-index:99; width: 46px; height: 50px;"><a href=
"http://rollyo.com"><img style=
"border: none;" height=
"50" width=
"46" src=
"http://rollyo.com/remote/x.gif"></a></div> <input type='text' size='
30' style='float: left; width:
90px; margin:
2px
0 0 48px; padding:
0; font-size:
12px;' name='q' value='Search...' onclick='this.
value=
"";'
/><br /> <select name='sid' style='float: left; width:
78px; height:
15px; margin:
12px
0 0 46px; font-size:
7pt; padding:
0;'
><option value='
106081' selected='selected'
>liquidx
</option><option value='web'
>Search The Web
</option></select><input type='image' src='http://rollyo.com/remote/btn-togo.png' alt='Go' style='margin:
12px
0 0 3px; float: left;'
/><input type='hidden' name='togo-v' value='
1'
/></fieldset></form></div>
355 <div class=
"clear"> </div>
361 <script src=
"http://www.google-analytics.com/urchin.js" type=
"text/javascript"></script>
362 <script type=
"text/javascript">
363 _uacct =
"UA-58117-1";