-
Notifications
You must be signed in to change notification settings - Fork 0
Runtime
Wiki ▸ Documentation ▸ Runtime
The Vega runtime takes a Vega spec as input, parses it, and generates an interactive visualization in your browser using HTML5 technologies.
First, you'll need to create an HTML document to house your Vega visualization. Here's a basic scaffolding:
<html>
<head>
<title>Vega Scaffold</title>
<script src="http://trifacta.github.com/vega/d3.v3.min.js"></script>
<script src="http://trifacta.github.com/vega/vega.js"></script>
<script src="http://trifacta.github.com/vega/d3.geo.projection.min.js"></script>
</head>
<body>
<div id="vis"></div>
</body>
<script type="text/javascript">
// parse a spec and create a visualization view
function parse(spec) {
vg.parse.spec(spec, function(chart) { chart({el:"#vis"}).update(); });
}
parse("uri/to/your/vega/spec.json");
</script>
</html>
The HTML headers import the necessary libraries: D3 and Vega. The main starting point is then the method vg.parse.spec
, which takes either a Vega JSON specification or a URL as input. The specification file is then loaded and parsed into a chart component.
Assuming no errors occur, the compiled chart component is returned by a callback. The callback argument chart
above is a function that serves as a constructor for new chart view instances. This constructor takes an options hash as a single argument. The following options are supported:
- el - [DOMElement | String] (required) The DOM element in which the chart should reside. The input value can either be a DOM object or a CSS selector. Note that Vega may remove or change any existing content in the DOM element.
- data - [Object] (optional) An object containing named data sets. The data argument can be used to bind data sets at runtime for dynamic, reusable chart components. Data sets whose names do not match any data definitions in the Vega specification will be ignored.
-
hover - [Boolean] (optional) Determines if the chart should use the default hover behavior, which is to invoke the
"hover"
property set upon mouseover and the"update"
property set upon mouseout. This option defaults to true if undefined. If set tofalse
, the returned chart view instance will have no registered event listeners. -
renderer - [String] (optional) Specifies what rendering system to use. A value of
"canvas"
(the default) tells Vega to use the HTML5 canvas tag to render visualizations. A value of"svg"
causes Scalable Vector Graphics (SVG) to be used instead.
Once a visualization component has been instantiated and configured, the update()
method initiates visual encoding and rendering.
The chart
constructor returns an instance of vg.View
, which provides a public API for further runtime customization of the visualization, including the addition of event listeners for interaction. The documentation below describes the available methods of the view component. Each can be invoked using a method chaining style. For example, the following code changes the size and rendering method for an existing view: view.width(500).height(200).renderer("svg").update()
.
-
width - [Integer] Sets the width of the view canvas, in pixels.
-
height - [Integer] Sets the height of the view canvas, in pixels.
-
padding - [Object] Sets the padding of the view component. The input object must include
left
,right
,top
, andbottom
properties, each with an integer value. -
viewport - [Array<Integer>] Sets the visible viewport size. The input should be a two-element array with integer values indicating the width and height of the viewport, in pixels. If the viewport size is smaller than the width or height properties, the view component will include scroll bars.
-
renderer - [String] Sets which renderer to use to draw the Vega visualization. The legal values are
"canvas"
for HTML5 2D canvas drawing (the default) and"svg"
for Scalable Vector Graphics. -
data - [Object] Updates the current data bindings. The input argument must be an object containing named data sets. The input object can be used to bind or update data sets at runtime. Data sets whose names do not match any data definitions in the Vega specification will be ignored.
-
initialize - [String | DOMElement] Initializes the view component for use under the input DOM element. The input value can either be a DOM object or a CSS selector. Note that Vega may remove or change any existing content in the DOM element. Clients should rarely if ever invoke this method, as it is invoked by the chart view constructor.
-
render - [Array<SceneItems>] Causes the current scene to be redrawn as-is. If no arguments are provided, the full scene is redrawn. If an array of scenegraph items are provided as input, just those items will be redrawn.
-
update - [Object] Invokes an update for the visualization. If no arguments are provided, the full scenegraph will be constructed according to the current data sets, all visual encoders will be run, and then the scene will be rendered. The update function takes an optional options hash as its single argument. The following options are supported:
-
props - [String] A string indicating the name of the mark property set to run (e.g.,
"update"
or"hover"
). This allows targeted invocation of specific mark property encodings. This option should only be used after a full build of the visualization has been performed. - items - [SceneItem | Array<SceneItem>] A single scenegraph item or an array of scenegraph items to update. All visual encoding and rendering will be limited to just these input items. This option should only be used after a full build of the visualization has been performed.
- duration [Number] The length of an animated transition for this update, in milliseconds. If unspecified, a static (zero second) transition will be used.
-
ease [String] The easing function for the animated transition. The supported easing types are
linear
,quad
,cubic
,sin
,exp
,circle
, andbounce
, plus the modifiersin
,out
,in-out
, andout-in
. The default iscubic-in-out
. For more details please see the D3 ease function documentation.
Examples
view.update()
- Update the visualization view. Invokes the "update" property set for all marks.view.update({props:"hover", items:item})
- Update the view by invoking the "hover" property set for the given scenegraph item.view.update({duration: 500})
- Update the visualization view using a 500 millisecond (0.5s) animated transition.view.update({duration:500, ease:"bounce-in"})
- Update the visualization view using a 500 millisecond (0.5s) animated transition and a "bounce-in" easing function.view.update({props:"hover", items:item, duration:500, ease:"bounce-in"})
- Updates the view to show the hover properties of the given scenegraph item, using a 500ms animated transition. -
props - [String] A string indicating the name of the mark property set to run (e.g.,
-
on - [String, Function] Adds an event listener. The first argument should be the event name to listen to (event names of the form
"click.custom"
are allowed to enable easier removal of specific listeners; the actual DOM event name is assumed to be the text before the first dot character). The second argument should be a callback function that accepts two arguments: a DOM Event object and a scenegraph item.Examples
view.on("mouseover", function(event, item) { console.log(item); })
- Adds a listener function to receive "mouseover" events. This particular listener simply prints the scenegraph item being hovered over.view.on("click", function(event, item) { view.update("click", item); })
- Adds a listener function to receive "click" events. This particular listener invokes a custom "click" property set for the selected item; the "click" properties must be defined within the mark specification.view.on("mouseover.custom", func)
- Adds the event listener functionfunc
to receive "mouseover" events, using a special suffix to aid targeted removal of the listener later on. -
off - [String, Function] Removes one or more event listeners. The first argument indicates the event name for which to remove listeners. If only one argument is provided, all listeners registered with that same string will be removed. The second (optional) argument should be a specific event listener callback to remove.
Examples
view.off("mouseover")
- Removes all event listeners registered for the "mouseover" event. Listeners registered with a special suffix (e.g., "mouseover.custom") will not be removed.view.off("mouseover.custom")
- Removes all event listeners registered for the "mouseover.custom" event. Listeners registered with no suffix ("mouseover") or a different suffix ("mouseover.mine") will not be removed.view.off("mouseout", func)
- Removes the specific event listener functionfunc
registered on "mouseout" events.