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.Layout | 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 <link href=
"doc.css" media=
"screen" rel=
"stylesheet" type=
"text/css" />
23 <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>
25 <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>
27 <ul id=
"menu" class=
"code">
28 <li class=
"tab" id=
"blog"><a href=
"http://www.liquidx.net/" title=
"blog/home">blog
</a></li>
29 <li class=
"tab" id=
"code"><a href=
"http://www.liquidx.net/code/" title=
"software i have written">software
</a></li>
30 <li class=
"tab" id=
"dev"><a href=
"http://projects.liquidx.net/" title=
"source code for my open source projects">dev
</a></li>
31 <li class=
"tab" id=
"photos"><a href=
"http://al.tse.id.au/gallery/" title=
"photos and videos">photos
</a></li>
32 <li class=
"tab" id=
"research"><a href=
"http://al.tse.id.au/research/" title=
"research profile">research
</a></li>
33 <li class=
"tab" id=
"links"><a href=
"http://www.liquidx.net/links/" title=
"my bookmarks">linkblog
</a></li>
34 <li class=
"tab" id=
"stats"><a href=
"http://stats.liquidx.net/" title=
"stats for various parts of my website">stats
</a></li>
35 <li class=
"tab" id=
"status"><a href=
"http://www.liquidx.net/status/" title=
"weather report for alastair">status
</a></li>
36 <li class=
"tab" id=
"about"><a href=
"http://al.tse.id.au/" title=
"about alastair tse">aboutme
</a></li>
40 <div id=
"quickbuttons">
41 <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>
42 <span class=
"quickbutton"><a href=
"http://www.liquidx.net/plotkit/"><img src=
"http://media.liquidx.net/imgx/quick_plotkit.png" alt=
"plotkit" /></a></span>
43 <span class=
"quickbutton"><a href=
"http://www.liquidx.net/fruity/"><img src=
"http://media.liquidx.net/imgx/quick_fruity.png" alt=
"fruity" /></a></span>
49 <div class=
"page doc api">
51 <p> <a href=
"PlotKit.html">PlotKit Home
</a> |
<a href=
"PlotKit.Base.html"><<</a> |
<a href=
"PlotKit.Renderer.html">>></a>
54 <h1> PlotKit Layout
</h1>
55 <p>PlotKit Layout is the core of the plotting engine. It deals exclusively with laying objects out on a virtual canvas that has the dimension of
1.0 x
1.0.
57 <p>The layout engine abstracts away all the complex layout problems with plotting charts and presents a list of objects that need to rendered rather than mixing this with the rendering logic.
59 <p>PlotKit Layout also is responsible for simple chart state querying so renderers can implement basic event support for objects on the canvas.
63 <p> <code>new Layout(style, options);
</code>
65 <p>Layout takes the following arguments:
67 <p> <strong>style
</strong> which can be
<code>bar
</code>,
<code>line
</code> or
<code>pie
</code> which represnts the style of the graph that is desired.
69 <p> <strong>options
</strong> is a dictionary/associative array of layout options. Unrecognised keys are ignored. The following options are supported:
72 <h1> Layout Options
</h1>
74 <h2> Bar and Line Chart layout options
</h2>
75 <table cellpadding=
"0" cellspacing=
"0">
77 <tr><td>Option name
</td><td>Description
</td><td>Type
</td><td>Default
</td></tr>
81 <th>barWidthFillFraction
</th>
82 <td>Amount of space the total amount of bars should consume per X value.
</td>
87 <th>barOrientation
</th>
88 <td>Orientation of a bar chart.
<b>(PlotKit
0.9+ only)
</b></td>
89 <td>String (
"vertical",
"horizontal")
</td>
95 <td>Minimum and Maximum values on the X axis.
</td>
96 <td>Array of
2 Real numbers. (eg. [
0.0,
10.0])
</td>
100 <th>xNumberOfTicks
</th>
101 <td>Used when automatically calculating axis ticks. This denotes the number of ticks there should be in the graph.
</td>
106 <th>xOriginIsZero
</th>
107 <td>Should graph have X axis origin at
0</td>
112 <th>xTickPrecision
</th>
113 <td>The number of decimal places we should round to for tick values.
</td>
119 <td>X values at which ticks should be drawn. Automatically calculated if not defined using the parameters `xNumberOfTicks` and ``xTickPrecision``.
</td>
120 <td>Array of {label:
"somelabel", v:value}.
</td>
126 <td>Minimum and Maximum values on the Y axis.
</td>
127 <td>Array of
2 Real numbers. (eg. [
0.0,
10.0])
</td>
131 <th>yNumberOfTicks
</th>
132 <td>Used when automatically calculating axis ticks. This denotes the number of ticks there should be in the graph.
</td>
137 <th>yOriginIsZero
</th>
138 <td>Should graph have Y axis origin at
0</td>
142 <th>yTickPrecision
</th>
143 <td>The number of decimal places we should round to for tick values.
</td>
149 <td>Y values at which ticks should be drawn. Automatically calculated if not defined using the parameters ``yNumberOfTicks`` and ``yTickPrecision``.
</td>
150 <td>Array of {label:
"somelabel", v:value}.
</td>
157 <h2> Pie Chart Layout Options
</h2>
160 <tr><td>Option name
</td><td>Description
</td><td>Type
</td><td>Default
</td></tr>
165 <td>Radius of the circle to be drawn.
</td>
173 <h1> Layout Properties
</h1>
174 <p>There are some properties you can access, either because you are using a layout inside a renderer or if you would like additional information. Under normal operations, you will not need to, or should modify these parameters.
176 <table cellpadding=
"0" cellspacing=
"0">
178 <tr><td>Property
</td><td>Type
</td><td>Description
</td></tr>
184 <td>This denotes the type of chart this layout is using. Valid values are ``bar``, ``line`` or ``pie``. Renderers will use this to determine which parameter (``bars``, ``points`` or ``slices``) to access in order to get draw the chart.
</td>
188 <td>Array of Bar.
</td>
189 <td>This is a list of rectangles with values that the renderer should plot. This will only be valid after ``evaluate()`` has run. The properties of ``bar`` is described here. This is only valid if style is ``bar``. This array is sorted by dataset and then x-values.
</td>
193 <td>Array of Point.
</td>
194 <td>This is a list of points with values that the renderer should plot. This will only be valid after ``evaluate()`` has run. The properties of ``bar`` is described here. This is only valid if style is ``line``. This array is sorted by dataset and then x-values.
</td>
198 <td>Array of Slice.
</td>
199 <td>This is a list of pie slices with values that the renderer should plot. This will only be valid after ``evaluate()`` has run. The properties of ``bar`` is described here. This is only valid if style is ``pie``.
</td>
203 <td>Array of Tick.
</td>
204 <td>For style in ``bar`` or ``line``, these are the ticks on the X axis. A ``tick`` is represented as a two element array with the first element representing the x position of the tick and the second element representing the string value of the label at that position.
</td>
208 <td>Array of Tick.
</td>
209 <td>For style in ``bar`` or ``line``, these are the ticks on the Y axis. A ``tick`` is represented as a two element array with the first element representing the y position of the tick and the second element representing the string value of the label at that position.
</td>
213 <td>Associative Array of datasets
</td>
214 <td>This should normally only be used to find the number of datasets by performing ``keys(layout.datasets)``. If you are looking at this in a renderer, then the layout engine needs to be extended.
</td>
220 <h1> Layout Types
</h1>
221 <p>Here are the definition of the types that you will encounter if you access the properties of the Layout object, specifically
<code>bars
</code>,
<code>points
</code> and
<code>slices
</code>. If you are not writing a renderer, you do not need to know this.
225 <p>Represents a bar that the renderer will draw. It contains the following properties.
227 <table cellpadding=
"0" cellspacing=
"0">
229 <tr><td>Property
</td><td>Type
</td><td>Description
</td></tr>
235 <td>top left position of the bar between
0.0 and
1.0.
</td>
240 <td>width and height of the bar from (``x``, ``y``) between
0.0 and
1.0.
</td>
245 <td>The actual x value and y value this bar represents.
</td>
250 <td>Name of the dataset which this bar belongs to.
</td>
257 <p>This represents a point on a line chart.
259 <table cellpadding=
"0" cellspacing=
"0">
261 <tr><td>Property
</td><td>Type
</td><td>Description
</td></tr>
267 <td>top left position of the point between
0.0 and
1.0.
</td>
272 <td>The actual x value and y value this bar represents.
</td>
277 <td>Name of the dataset which this bar belongs to.
</td>
284 <p>This represents a pie slice in a pie chart.
288 <tr><td>Property
</td><td>Type
</td><td>Description
</td></tr>
294 <td>The fractional value this slice represents. This number is between
0.0 and
1.0</td>
299 <td>The x and y values of this slice.
</td>
304 <td>This is the angle of the start of the slice, in radians.
</td>
309 <td>This is the angle of the end of the slice, in radians.
</td>
315 <h1> Layout Methods
</h1>
318 <code>addDataset(name, values)
</code>
321 <p> Adds a dataset to the layout engine and assigns it with
<code>name
</code>.
<code>values
</code> is an array of
<code>\[x, y\]
</code> values.
325 <code>removeDataset(name)
</code>
328 <p> Removes a dataset from the layout engine. In order for the new data to take effect, you must run
<code>evaluate()
</code>.
332 <code>addDatasetFromTable(name, tableElement, xcol =
0, ycol =
1, labelCol = -
1)
</code>
335 <p> Handy function to read values off a table.
<code>name
</code> is the name to give to the dataset just like in
<code>addDataset()
</code>,
<code>tableElement
</code> is the table which contains the values. Optionally, the user may specify to extract alternative columns using
<code>xcol
</code> and
<code>ycol
</code>.
337 <p> <strong>New in
0.9.1:
</strong> If
<code>labelCol
</code> is specified to a value greater than -
1, it will take the contents of that column as the xTick labels.
341 <code>evaluate()
</code>
344 <p> Performs the evaluation of the layout. It is not done automatically, and you
<strong>must
</strong> execute this before passing the layout to a renderer.
351 <p> Used by renderers to see if a virtual canvas position corresponds to any data. The return value varies per style. For
<code>bar
</code> charts, it will return the Bar type if it is a hit, or null if not. For
<code>line
</code> charts, it will return a value if the point is underneath the highest curve, otherwise null
<strong>(TODO: expand this or change implementation)
</strong>. For
<code>pie
</code> charts, it will return the Slice object that is at the point, otherwise null.
353 <p> <strong>Note that the specification of this function is subject to change
</strong>.
356 <h1> Layout Notes
</h1>
358 <h2> Pie Chart Data and Ticks Restrictions
</h2>
359 <p>Note that you can only use one dataset for pie charts. Only the y value of the dataset will be used, but the x value must be unique and set as it will correspond to the xTicks that are given.
361 <p>Labels for pie charts will only use xTicks.
364 <h1> Layout Examples
</h1>
375 <h3>Syndication Feeds:
</h3>
378 <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>
379 <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>
380 <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>
381 <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>
386 <h3>About this site:
</h3>
387 <p>Content on this site is licensed under
<a href=
"http://creativecommons.org/licenses/by/2.5/">CC By Attribution
</a> unless otherwise specified.
388 Copyright (c)
2002-
2006,
<a href=
"http://al.tse.id.au/">Alastair Tse
</a>.
</p>
389 <p>For more information, see
<a href=
"http://al.tse.id.au/">al.tse.id.au
</a>.
</p>
390 <p><script type=
"text/javascript" src=
"http://technorati.com/embed/itwctkzez.js"></script></p>
393 <h3>Is Made Possible By:
</h3>
396 <dt><a href=
"http://ecto.kung-foo.tv/" class=
"clean">ecto
</a>.
</dt>
397 <dd>Blogging client for Mac
</dd>
398 <dt><a href=
"http://djangoproject.com/" class=
"clean">Django
</a>.
</dt>
399 <dd>Python Web Framework
</dd>
400 <dt><a href=
"http://www.lighttpd.net/" class=
"clean">lighttpd
</a>.
</dt>
401 <dd>Really Fast Web Server
</dd>
402 <dt><a href=
"http://www.saddi.com/software/flup/" class=
"clean">flup
</a>.
</dt>
403 <dd>FastCGI for Python
</dd>
408 <h3>Search My Sites:
</h3>
410 <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>
415 <div class=
"clear"> </div>
421 <script src=
"http://www.google-analytics.com/urchin.js" type=
"text/javascript"></script>
422 <script type=
"text/javascript">
423 _uacct =
"UA-58117-1";