| [`hoverBackgroundColor`](#interations) | [`Color`](../general/colors.md) | Yes | Yes | `undefined`
| [`hoverBorderColor`](#interactions) | [`Color`](../general/colors.md) | Yes | Yes | `undefined`
| [`hoverBorderWidth`](#interactions) | `number` | Yes | Yes | `undefined`
+| [`weight`](#styling) | `number` | - | - | `1`
### Styling
| `backgroundColor` | arc background color.
| `borderColor` | arc border color.
| `borderWidth` | arc border width (in pixels).
+| `weight` | The relative thickness of the dataset. Providing a value for weight will cause the pie or doughnut dataset to be drawn with a thickness relative to the sum of all the dataset weight values.
All these values, if `undefined`, fallback to the associated [`elements.arc.*`](../configuration/elements.md#arc-configuration) options.
var helpers = require('../helpers/index');
var resolve = helpers.options.resolve;
+var valueOrDefault = helpers.valueOrDefault;
defaults._set('doughnut', {
animation: {
var arcs = meta.data;
var cutoutPercentage = opts.cutoutPercentage;
var circumference = opts.circumference;
+ var chartWeight = me._getRingWeight(me.index);
var i, ilen;
// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc
chart.borderWidth = me.getMaxBorderWidth();
chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);
chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);
- chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
+ chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);
chart.offsetX = offset.x * chart.outerRadius;
chart.offsetY = offset.y * chart.outerRadius;
meta.total = me.calculateTotal();
- me.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index));
- me.innerRadius = Math.max(me.outerRadius - chart.radiusLength, 0);
+ me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);
+ me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);
for (i = 0, ilen = arcs.length; i < ilen; ++i) {
me.updateElement(arcs[i], i, reset);
var model = arc._model;
var options = arc._options;
var getHoverColor = helpers.getHoverColor;
- var valueOrDefault = helpers.valueOrDefault;
arc.$previousStyle = {
backgroundColor: model.backgroundColor,
}
return values;
+ },
+
+ /**
+ * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly
+ * @private
+ */
+ _getRingWeightOffset: function(datasetIndex) {
+ var ringWeightOffset = 0;
+
+ for (var i = 0; i < datasetIndex; ++i) {
+ if (this.chart.isDatasetVisible(i)) {
+ ringWeightOffset += this._getRingWeight(i);
+ }
+ }
+
+ return ringWeightOffset;
+ },
+
+ /**
+ * @private
+ */
+ _getRingWeight: function(dataSetIndex) {
+ return Math.max(valueOrDefault(this.chart.data.datasets[dataSetIndex].weight, 1), 0);
+ },
+
+ /**
+ * Returns the sum of all visibile data set weights. This value can be 0.
+ * @private
+ */
+ _getVisibleDatasetWeightTotal: function() {
+ return this._getRingWeightOffset(this.chart.data.datasets.length);
}
});
--- /dev/null
+{
+ "config": {
+ "type": "doughnut",
+ "data": {
+ "datasets": [{
+ "data": [ 1, 1 ],
+ "backgroundColor": [
+ "rgba(255, 99, 132, 0.8)",
+ "rgba(54, 162, 235, 0.8)"
+ ],
+ "borderWidth": 0
+ },
+ {
+ "data": [ 2, 1 ],
+ "hidden": true,
+ "borderWidth": 0
+ },
+ {
+ "data": [ 3, 3 ],
+ "weight": 3,
+ "backgroundColor": [
+ "rgba(255, 206, 86, 0.8)",
+ "rgba(75, 192, 192, 0.8)"
+ ],
+ "borderWidth": 0
+ },
+ {
+ "data": [ 4, 0 ],
+ "weight": 0,
+ "borderWidth": 0
+ },
+ {
+ "data": [ 5, 0 ],
+ "weight": -2,
+ "borderWidth": 0
+ }],
+ "labels": [ "label0", "label1" ]
+ },
+ "options": {
+ "legend": false,
+ "title": false
+ }
+ },
+ "options": {
+ "canvas": {
+ "height": 500,
+ "width": 500
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "config": {
+ "type": "pie",
+ "data": {
+ "datasets": [
+ {
+ "data": [ 1, 1 ],
+ "backgroundColor": [
+ "rgba(255, 99, 132, 0.8)",
+ "rgba(54, 162, 235, 0.8)"
+ ],
+ "borderWidth": 0
+ },
+ {
+ "data": [ 2, 1 ],
+ "hidden": true,
+ "borderWidth": 0
+ },
+ {
+ "data": [ 3, 3 ],
+ "weight": 3,
+ "backgroundColor": [
+ "rgba(255, 206, 86, 0.8)",
+ "rgba(75, 192, 192, 0.8)"
+ ],
+ "borderWidth": 0
+ },
+ {
+ "data": [ 4, 0 ],
+ "weight": 0,
+ "borderWidth": 0
+ },
+ {
+ "data": [ 5, 0 ],
+ "weight": -2,
+ "borderWidth": 0
+ }
+ ],
+ "labels": [ "label0", "label1" ]
+ },
+ "options": {
+ "legend": false,
+ "title": false
+ }
+ },
+ "options": {
+ "canvas": {
+ "height": 500,
+ "width": 500
+ }
+ }
+}
\ No newline at end of file