PieSeries.js revision a75ebc38c1de401b679953a9b87bd323f0f48d02
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * PieSeries visualizes data as a circular chart divided into wedges which represent data as a
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * percentage of a whole.
a75ebc38c1de401b679953a9b87bd323f0f48d02Tripp * @module charts
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @class PieSeries
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @constructor
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @extends MarkerSeries
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTrippY.PieSeries = Y.Base.create("pieSeries", Y.MarkerSeries, [], {
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Image map used for interactivity when rendered with canvas.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _map
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type HTMLElement
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Image used for image map when rendered with canvas.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _image
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type HTMLElement
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Creates or updates the image map when rendered with canvas.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _setMap
91d40744967aabc3e1c105820a22e279fdecc689Tripp _setMap: function()
91d40744967aabc3e1c105820a22e279fdecc689Tripp var id = "pieHotSpotMapi_" + Math.round(100000 * Math.random()),
91d40744967aabc3e1c105820a22e279fdecc689Tripp this._image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==";
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Storage for `categoryDisplayName` attribute.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _categoryDisplayName
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Storage for `valueDisplayName` attribute.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _valueDisplayName
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Adds event listeners.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method addListeners
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataReady", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataUpdate", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataReady", Y.bind(this._valueDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataUpdate", Y.bind(this._valueDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this.after("categoryAxisChange", this.categoryAxisChangeHandler);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this.after("valueAxisChange", this.valueAxisChangeHandler);
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Draws the series.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method validate
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this._renderered = true;
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Event handler for the categoryAxisChange event.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _categoryAxisChangeHandler
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Object} e Event object.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataReady", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataUpdate", Y.bind(this._categoryDataChangeHandler, this));
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Event handler for the valueAxisChange event.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _valueAxisChangeHandler
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Object} e Event object.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataReady", Y.bind(this._valueDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataUpdate", Y.bind(this._valueDataChangeHandler, this));
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * Constant used to generate unique id.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property GUID
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type String
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Event handler for categoryDataChange event.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _categoryDataChangeHandler
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Object} event Event object.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if(this._rendered && this.get("categoryKey") && this.get("valueKey"))
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Event handler for valueDataChange event.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _valueDataChangeHandler
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Object} event Event object.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if(this._rendered && this.get("categoryKey") && this.get("valueKey"))
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Draws the series. Overrides the base implementation.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @method draw
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp draw: function()
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this._rendered = true;
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Draws the markers
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method drawPlots
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp var values = this.get("valueAxis").getDataByKey(this.get("valueKey")).concat(),
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp catValues = this.get("categoryAxis").getDataByKey(this.get("categoryKey")).concat(),
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp w = graph.get("width") - (padding.left + padding.right),
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp h = graph.get("height") - (padding.top + padding.bottom),
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp for(; i < itemCount; ++i)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp color:tfc ? tfc.shift() : this._getDefaultColor(i, "slice"),
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Adds an interactive map when rendering in canvas.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _addHotspot
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Object} cfg Object containing data used to draw the hotspot
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Number} seriesIndex Index of series in the `seriesCollection`.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Number} index Index of the marker using the hotspot.
91d40744967aabc3e1c105820a22e279fdecc689Tripp ax = x + Math.cos(startAngle / 180 * Math.PI) * radius,
91d40744967aabc3e1c105820a22e279fdecc689Tripp ay = y + Math.sin(startAngle / 180 * Math.PI) * radius,
91d40744967aabc3e1c105820a22e279fdecc689Tripp divAngle = (arc/(Math.floor(arc/10)) / 180) * Math.PI,
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (x + (radius * Math.cos(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (y + (radius * Math.sin(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (x - (radius * Math.cos(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (y - (radius * Math.sin(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp areaNode.setAttribute("id", "hotSpot_" + seriesIndex + "_" + index);
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Resizes and positions markers based on a mouse interaction.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @method updateMarkerState
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @param {String} type state of the marker
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @param {Number} i index of the marker
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp markerStyles = state == "off" || !styles[state] ? styles : styles[state];
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp indexStyles.fill.color = indexStyles.fill.colors[i % indexStyles.fill.colors.length];
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp indexStyles.fill.alpha = indexStyles.fill.alphas[i % indexStyles.fill.alphas.length];
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * Creates a shape to be used as a marker.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @method _createMarker
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @param {Object} styles Hash of style properties.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @param {Number} order Order of the series.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @param {Number} index Index within the series associated with the marker.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @return Shape
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Creates a cache of markers for reuse.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _createMarkerCache
c6624d55071139dbc6ebd4252f6c7ee46a5800a9Tripp for(; i < len; ++i)
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Gets the default style values for the markers.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _getPlotDefaults
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @return Object
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Collection of default colors used for lines in a series when not specified by user.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _defaultLineColors
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type Array
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultLineColors:["#426ab3", "#d09b2c", "#000000", "#b82837", "#b384b5", "#ff7200", "#779de3", "#cbc8ba", "#7ed7a6", "#007a6c"],
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Collection of default colors used for marker fills in a series when not specified by user.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _defaultFillColors
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type Array
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultFillColors:["#6084d0", "#eeb647", "#6c6b5f", "#d6484f", "#ce9ed1", "#ff9f3b", "#93b7ff", "#e0ddd0", "#94ecba", "#309687"],
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Collection of default colors used for marker borders in a series when not specified by user.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _defaultBorderColors
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type Array
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultBorderColors:["#205096", "#b38206", "#000000", "#94001e", "#9d6fa0", "#e55b00", "#5e85c9", "#adab9e", "#6ac291", "#006457"],
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Collection of default colors used for area fills, histogram fills and pie fills in a series when not specified by user.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @property _defaultSliceColors
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type Array
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultSliceColors: ["#66007f", "#a86f41", "#295454", "#996ab2", "#e8cdb7", "#90bdbd","#000000","#c3b8ca", "#968373", "#678585"],
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Colors used if style colors are not specified
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @method _getDefaultColor
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {Number} index Index indicating the series order.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @param {String} type Indicates which type of object needs the color.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @return String
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @protected
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Read-only attribute indicating the type of series.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute type
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type String
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @default pie
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Order of this instance of this `type`.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute order
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Number
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Reference to the `Graph` in which the series is drawn into.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute graph
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Graph
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Reference to the `Axis` instance used for assigning
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * category values to the graph.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute categoryAxis
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Axis
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Reference to the `Axis` instance used for assigning
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * series values to the graph.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute categoryAxis
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Axis
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Indicates which array to from the hash of value arrays in
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * the category `Axis` instance.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @attribute categoryKey
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type String
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Indicates which array to from the hash of value arrays in
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * the value `Axis` instance.
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @attribute valueKey
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type String
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Name used for for displaying category data
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute categoryDisplayName
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type String
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp getter: function()
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp return this._categoryDisplayName || this.get("categoryKey");
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Name used for for displaying value data
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute valueDisplayName
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type String
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp getter: function()
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp return this._valueDisplayName || this.get("valueKey");
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @attribute slices
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * @type Array
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * Style properties used for drawing markers. This attribute is inherited from `MarkerSeries`. Below are the default values:
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>fill</dt><dd>A hash containing the following values:
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>colors</dt><dd>An array of colors to be used for the marker fills. The color for each marker is retrieved from the
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * array below:<br/>
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * `["#66007f", "#a86f41", "#295454", "#996ab2", "#e8cdb7", "#90bdbd","#000000","#c3b8ca", "#968373", "#678585"]`
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>alphas</dt><dd>An array of alpha references (Number from 0 to 1) indicating the opacity of each marker fill. The default value is [1].</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>border</dt><dd>A hash containing the following values:
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>color</dt><dd>An array of colors to be used for the marker borders. The color for each marker is retrieved from the
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * array below:<br/>
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * `["#205096", "#b38206", "#000000", "#94001e", "#9d6fa0", "#e55b00", "#5e85c9", "#adab9e", "#6ac291", "#006457"]`
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>weight</dt><dd>Number indicating the width of the border. The default value is 1.</dd>
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * <dt>over</dt><dd>hash containing styles for markers when highlighted by a `mouseover` event. The default
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * values for each style is null. When an over style is not set, the non-over value will be used. For example,
8209f3939e32e0e5bde64192267fdaf9db6f4fbcTripp * the default value for `marker.over.fill.color` is equivalent to `marker.fill.color`.</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @attribute styles
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @type Object