From 65bfacd9a59a1dd3ee6b67f3968aa9e12423fec6 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Mon, 22 Feb 2021 00:30:37 +0200 Subject: [PATCH] Add outerRadius option to doughnut/pie (#8487) --- docs/docs/charts/doughnut.mdx | 1 + src/controllers/controller.doughnut.js | 10 +++++-- src/controllers/controller.pie.js | 7 +++-- src/helpers/helpers.core.js | 5 ++++ .../doughnut-outer-radius-percent.js | 28 ++++++++++++++++++ .../doughnut-outer-radius-percent.png | Bin 0 -> 16258 bytes .../doughnut-outer-radius-pixels.js | 28 ++++++++++++++++++ .../doughnut-outer-radius-pixels.png | Bin 0 -> 28091 bytes types/index.esm.d.ts | 20 ++++++++----- .../controllers/doughnut_outer_radius.ts | 14 +++++++++ 10 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 test/fixtures/controller.doughnut/doughnut-outer-radius-percent.js create mode 100644 test/fixtures/controller.doughnut/doughnut-outer-radius-percent.png create mode 100644 test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.js create mode 100644 test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.png create mode 100644 types/tests/controllers/doughnut_outer_radius.ts diff --git a/docs/docs/charts/doughnut.mdx b/docs/docs/charts/doughnut.mdx index a9b929eb4..b2b69e30f 100644 --- a/docs/docs/charts/doughnut.mdx +++ b/docs/docs/charts/doughnut.mdx @@ -164,6 +164,7 @@ These are the customisation options specific to Pie & Doughnut charts. These opt | Name | Type | Default | Description | ---- | ---- | ------- | ----------- | `cutoutPercentage` | `number` | `50` - for doughnut, `0` - for pie | The percentage of the chart that is cut out of the middle. +| `outerRadius` | `number`\|`string` | `100%` | The outer radius of the chart. If `string` and ending with '%', percentage of the maximum radius. `number` is considered to be pixels. | `rotation` | `number` | 0 | Starting angle to draw arcs from. | `circumference` | `number` | 360 | Sweep to allow arcs to cover. | `animation.animateRotate` | `boolean` | `true` | If true, the chart will animate in with a rotation animation. This property is in the `options.animation` object. diff --git a/src/controllers/controller.doughnut.js b/src/controllers/controller.doughnut.js index c283a266a..2f013c0cf 100644 --- a/src/controllers/controller.doughnut.js +++ b/src/controllers/controller.doughnut.js @@ -1,6 +1,6 @@ import DatasetController from '../core/core.datasetController'; import {formatNumber} from '../core/core.intl'; -import {isArray, valueOrDefault} from '../helpers/helpers.core'; +import {isArray, numberOrPercentageOf, valueOrDefault} from '../helpers/helpers.core'; import {toRadians, PI, TAU, HALF_PI} from '../helpers/helpers.math'; /** @@ -138,7 +138,8 @@ export default class DoughnutController extends DatasetController { const spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs); const maxWidth = (chartArea.right - chartArea.left - spacing) / ratioX; const maxHeight = (chartArea.bottom - chartArea.top - spacing) / ratioY; - const outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); + const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); + const outerRadius = numberOrPercentageOf(me.options.outerRadius, maxRadius); const innerRadius = Math.max(outerRadius * cutout, 0); const radiusLength = (outerRadius - innerRadius) / me._getVisibleDatasetWeightTotal(); me.offsetX = offsetX * outerRadius; @@ -350,7 +351,10 @@ DoughnutController.defaults = { rotation: 0, // The total circumference of the chart. - circumference: 360 + circumference: 360, + + // The outr radius of the chart + outerRadius: '100%' }, indexAxis: 'r', diff --git a/src/controllers/controller.pie.js b/src/controllers/controller.pie.js index c88a3cbc3..f0162ef2d 100644 --- a/src/controllers/controller.pie.js +++ b/src/controllers/controller.pie.js @@ -13,12 +13,15 @@ PieController.id = 'pie'; PieController.defaults = { datasets: { // The percentage of the chart that we cut out of the middle. - cutoutPercentage: 0, + cutout: 0, // The rotation of the chart, where the first data arc begins. rotation: 0, // The total circumference of the chart. - circumference: 360 + circumference: 360, + + // The outr radius of the chart + outerRadius: '100%' } }; diff --git a/src/helpers/helpers.core.js b/src/helpers/helpers.core.js index 159c1335c..f670065c3 100644 --- a/src/helpers/helpers.core.js +++ b/src/helpers/helpers.core.js @@ -85,6 +85,11 @@ export function valueOrDefault(value, defaultValue) { return typeof value === 'undefined' ? defaultValue : value; } +export const numberOrPercentageOf = (value, dimension) => + typeof value === 'string' && value.endsWith('%') ? + parseFloat(value) / 100 * dimension + : +value; + /** * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the * value returned by `fn`. If `fn` is not a function, this method returns undefined. diff --git a/test/fixtures/controller.doughnut/doughnut-outer-radius-percent.js b/test/fixtures/controller.doughnut/doughnut-outer-radius-percent.js new file mode 100644 index 000000000..28dd46da0 --- /dev/null +++ b/test/fixtures/controller.doughnut/doughnut-outer-radius-percent.js @@ -0,0 +1,28 @@ +module.exports = { + config: { + type: 'doughnut', + data: { + labels: ['A', 'B', 'C', 'D', 'E'], + datasets: [{ + data: [1, 5, 10, 50, 100], + backgroundColor: [ + 'rgba(255, 99, 132, 0.8)', + 'rgba(54, 162, 235, 0.8)', + 'rgba(255, 206, 86, 0.8)', + 'rgba(75, 192, 192, 0.8)', + 'rgba(153, 102, 255, 0.8)' + ], + borderColor: [ + 'rgb(255, 99, 132)', + 'rgb(54, 162, 235)', + 'rgb(255, 206, 86)', + 'rgb(75, 192, 192)', + 'rgb(153, 102, 255)' + ] + }] + }, + options: { + outerRadius: '30%', + } + } +}; diff --git a/test/fixtures/controller.doughnut/doughnut-outer-radius-percent.png b/test/fixtures/controller.doughnut/doughnut-outer-radius-percent.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f0dcdff6f37b8225030fbc5ca9cf05dfd39730 GIT binary patch literal 16258 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 ZufJ2?Im7?=MG)|#qiJvlecR^we*q0&x*Grh literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.js b/test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.js new file mode 100644 index 000000000..a4a50df23 --- /dev/null +++ b/test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.js @@ -0,0 +1,28 @@ +module.exports = { + config: { + type: 'doughnut', + data: { + labels: ['A', 'B', 'C', 'D', 'E'], + datasets: [{ + data: [1, 5, 10, 50, 100], + backgroundColor: [ + 'rgba(255, 99, 132, 0.8)', + 'rgba(54, 162, 235, 0.8)', + 'rgba(255, 206, 86, 0.8)', + 'rgba(75, 192, 192, 0.8)', + 'rgba(153, 102, 255, 0.8)' + ], + borderColor: [ + 'rgb(255, 99, 132)', + 'rgb(54, 162, 235)', + 'rgb(255, 206, 86)', + 'rgb(75, 192, 192)', + 'rgb(153, 102, 255)' + ] + }] + }, + options: { + outerRadius: 150, + } + } +}; diff --git a/test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.png b/test/fixtures/controller.doughnut/doughnut-outer-radius-pixels.png new file mode 100644 index 0000000000000000000000000000000000000000..195218cab3b079bfe9b2f68a5d702eb73964fa71 GIT binary patch literal 28091 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 /** * Starting angle to draw arcs from. @@ -290,12 +302,6 @@ export interface DoughnutControllerChartOptions { */ rotation: number; - /** - * Sweep to allow arcs to cover. - * @default 360 - */ - circumference: number; - animation: DoughnutAnimationOptions; } diff --git a/types/tests/controllers/doughnut_outer_radius.ts b/types/tests/controllers/doughnut_outer_radius.ts new file mode 100644 index 000000000..2c1dd73b7 --- /dev/null +++ b/types/tests/controllers/doughnut_outer_radius.ts @@ -0,0 +1,14 @@ +import { Chart } from '../../index.esm'; + +const chart = new Chart('id', { + type: 'doughnut', + data: { + labels: [], + datasets: [{ + data: [], + }] + }, + options: { + outerRadius: () => Math.random() > 0.5 ? 50 : '50%', + } +});