Notice: The architecture of this library is still evolving, so expect (many) backwards-incompatible changes
WebPPL visualization library. Demo: probmods.github.io/webppl-viz/.
Dependencies:
- webppl (0.9.2-b0139d4 or later)
- (optional) webppl-editor (eeb3208 or later)
- Cairo (see instructions for your operating system)
Installation:
cd ~ # or however you get to the home directory
mkdir .webppl # make a folder called .webppl (if it doesn't already exist)
cd .webppl
npm install probmods/webppl-viz # install this node packageUsage:
- Command-line: require as a WebPPL package. Example:
webppl foo.wppl --require webppl-viz - Browser: build (run
grunt bundle) and then include webppl-viz.js and webppl-viz.css on your web page. (You can also bundle this with core webppl when building that for the browser.)
Methods for plotting raw data.
viz.bar(df, [options])
viz.bar(xs, ys, [options])
Options:
horizontal(default: false). (TODO) draw a horizontal plot rather than vertical one.xLabel(default: x). x axis label.yLabel(default: y). y axis label.xType(default: nominal). type of x axis (nominal or quantitative).groupBy(default: none). Grouping variable for different bars.
viz.line(df, [options])
viz.line(xs, ys, [options])
Options:
xLabel(default: x). x axis label.yLabel(default: y). y axis label.groupBy(default: none). Grouping variable for different lines.xBounds(default: min and max of the supplied data). An array of [min,max] bounds for the x-axis.yBounds(default: min and max of the supplied data). An array of [min,max] bounds for the y-axis.strokeWidth(default: 2). The line stroke width, in pixels.
viz.scatter(xs, ys, [options])
viz.scatter(df, [options])
Options:
xLabel(default: x). x axis label.yLabel(default: y). y axis label.
Basic methods for visualizing samples and marginal distributions. These plot data that are up to 2-dimensional.
viz.table(dist, [options])
viz.table(samples, [options])
Options:
destructure(default = true). Expand support keys as columns of the table.log(default = false). If true, shows log probabilities.top(default = false). If a numbern, only shows topnresults.fileName(default = None). If provided, prints the table into that file in HTML format.
viz.hist(samples, [options])
viz.hist(dist, [options])
Options:
numBins(defaults to 30). For real-valued data, how many bins to aggregate data into.
viz.density(samples, [options])
viz.density(dist, [options])
Options:
bounds(default: min and max of the supplied samples). An array of bounds for density estimation
viz.heatMap(samples, [options])
viz.heatMap(dist, [options])
Options:
bandwidthX(TODO)bandwidthY(TODO)boundsX(TODO)boundsY(TODO)
TODO: document this
More complex methods for visualizing smaples and distributions. These can plot data that are higher dimensional.
viz.marginals(dist) shows each component of a joint distribution dist -- density plots for real components and histograms for categorical components.
viz.auto tries to automatically construct a useful visualization based on the types of the different components in the posterior.
Options:
summarize(default = false). (TODO) For data with real-valued components, you can either try to show all the data (scatter plot) or summarize by showing a density estimate (heat map). This option has no effect if data is entirely categorical.
How it works
viz.auto uses the types of the components to constrain visualization.
Let's use c to denote categorical variables and r for real variables (for now, ordinal variables are treated as categorical). Some examples of types:
| Support element | Type | Notes |
|---|---|---|
| String | c |
|
| Integer | r |
|
| Real number | r |
|
| Object | concatenation of component types | The type of {fruit: 'apple', price: 3.6} is rc |
| Array | concatenation of component types | The type of [9.2, 8.1, 'candy bar'] is rrc |
How each type is visualized:
| Type | Visualization |
|---|---|
c |
histogram |
r |
density plot |
cc |
bar plot (but if both dimensions have size >5, then heat map) |
cr |
density curve, colors for different categorical groups |
rr |
scatter plot (TODO |
ccc |
trellis frequency table |
ccr |
trellis density plot, colors for different categorical groups |
crr |
trellis scatter plot (TODO |
rrr+ |
parallel coordinates plot |
cccc |
trellis frequency table (TODO) |
cccr |
trellis scatter plot (TODO |
ccrr |
trellis scatter plot / heat map (TODO) |
crrr |
trellis parallel coordinates plot (TODO) |
ccrrr |
trellis parallel coordinates plot (TODO) |
grunt setup-demo # make webppl and webppl-editor dependencies for demo
grunt bundle # compile js + minify, make css
grunt browserify # compiling js
grunt uglify # minify js
grunt browserify-watch # watchified compile js
grunt css # make css