Release Notes
3.2 - May 28, 2010
layouts:
- completely redesigned for reusable visualizations!
- networks - arc, matrix, force-directed, etc.
- hierarchies - dendrograms, sunbursts, trees, treemaps, circle-packing, etc.
- stack layout (stacked bars, stacked areas, streamgraphs, etc.)
- horizon graphs, bullet charts, and more!
interaction:
- resuable behaviors - drag, pan, resize, select, point, zoom!
- events property for controlling event capture
data:
- scales - quantile, root
- ticks - date ticks, custom tick counts, tick formatting
- stats - histogram, variance, deviation
- text formatting and parsing - dates, numbers, times
- particle simulation - constraints, forces, quadtree
marks and rendering:
- partial rendering - re-render only specific marks for faster updates
- anchors - no longer inherit by default, can be used across panels
- antialias property for crisp edges
- interpolate property supports “cardinal”, “basis” and “polar”
- tension, eccentricity and lineJoin properties
- dynamic images
- rules one-pixel wide and not antialiased by default
geo:
- geo scales for mapping latitude-longitude to x-y
- projections - Mercator, Gall–Peters, sinusoidal, Aitoff, Hammer
gitorious:
- source code in protovis repository
- website and documentation in docs repository
3.1 - October 6, 2009
- panels now support an overflow property; set to “hidden” for clipping
- linear and log scales support tick formatting
- ordinal scale supports pv.index accessor
- log scale invert supports negative values
- rendering no longer removes children, so as to avoid spurious events
3.0 - September 19, 2009
interaction:
- properties now behave consistently in event handlers
- use local variables or properties to modify display
- can redraw at any level of the scene graph
- event handlers on parent panels are inherited by children
- can set window location to simulate links
- mark.mouse to get mouse location
local variables:
- use def to define local state per mark (e.g., def("foo"))
- event handlers can override def values (e.g., this.foo(42))
- properties can query def values (e.g., this.foo() == 42)
- can also be used to define efficient property functions (e.g., scales)
scales:
- pv.Scales is dead; long live pv.Scale
- scales each have a domain (input data) and range (output pixels/color/angle)
- scales are stateful, not magical
- ordinal scales are categorical (discrete domain and range)
- linear and log scales are quantiative (continuous domain and range)
- by functionality, useful as a “view”
- support for ticks, interaction, and more!
colors:
- default coloring now uses parent rather than (magical) mark index
- brighter and darker operators
- named colors (e.g., pv.ramp("brown", "orange"))
- by functionality standardized
- HSL to RGB conversion bug fixed
- per channel override methods (e.g. color.red(0))
- pv.Colors now uses pv.Scale.Ordinal under the hood
layouts:
- treemaps!
- sunbursts!
- icicles!
- tree size function for determining node size / children
- stack: allows stacking of bars and areas (etc.) with customizable baseline
- grid: two-dimensional table of bars or panels (heatmap, e.g.)
properties:
- evaluated in the order they are defined, allowing dependencies
- defs are evaluated before properties; constants before functions
- default data property is [d] rather than [null], simplifying nesting
- significant performance improvements!
- width and height now supported on rules
data:
- pv.repeat for array repetition
- pv.random for random integers (or intervals)
- pv.log{,Adjusted,Symmetric,Floor,Ceil}
- pv.transpose for transposing two-dimensional arrays
- pv.Vector for 2D geometry
- pv.tree and pv.flatten for converting between tabular and hierarchical data
lines and areas:
- can be segmented for variable lineWidth, color, visibility
- segmentation can change dynamically (e.g., on mouseover tooltip refinement)
- see Napoleon's March and animated examples
- step functions!
anchors:
- now use a single class, pv.Anchor
- define properties like normal marks
- support for anchors on root panel / anchors on panels
performance improvements:
- separated rendering from building to allow pluggable renderers
- optimized evaluation of properties
- don’t wrap constants in functions
- “bind” phase caches inherited property definitions
- minimize SVG output
- job voyager is about 2x faster
bug fixes:
- much more robust rebuild + re-render
- panel stroke now goes over children (consistent with images, use bar otherwise)
- circle dots with large lineWidths now render correctly
- reverse property now more robut
- type attribute now inherited; controls rendering behavior
- better !JavaScript minification
- use typeof == "function" rather than instanceof Function
- internal scene graph structure changed to facilitate traversal
- panel left/top/right/bottom now consistent with other marks
- better support for Date.parse and Date.format
2.6 - July 16, 2009
documentation:
- ~2,800 lines of new inline documentation
- browse online at http://protovis.org/jsdoc/
marks:
- Area width and height default to 0 if null
- Bar anchors allow stacking of bars vertically or horizontally (see test 9)
- Rule anchors reuse Bar.Anchor implementation (see test 32)
- Label text-baseline vertical offset adjusted (see tests 27-29)
- Label text-baseline supports font-dependent units (e.g., ex and em)
- Image image property renamed "url"
- Image supports fill-style and stroke-style
- Panel rendering bug fixes, performance optimizations
- Mark title property (a.k.a. tooltips) support
color:
- more robust categorical color encoding (pv.Colors)
- new quantitative color encoding (pv.Ramp)
miscellaneous:
- pv.range supports negative step
- pv.parse bug fix for string literals
- removed undefined global (built-in since JavaScript 1.3)
- experimental scales (pv.Scale)
- experimental chart templates in the works; coming soon!
- preliminary test framework online at http://protovis.org/test/