Chart.js/docs/samples/advanced/radial-gradient.md

117 lines
2.7 KiB
Markdown
Raw Normal View History

Vuepress samples (#8756) * Generate API docs with vuepress-plugin-typedoc * Links, fixes, cleanup * Convert bar samples to Vuepress * Some line chart samples moved over * Fix lint issues * Derived axis type sample * LineAreaStacked chart created in vuepress * added radar area axample * Line dataset added sample * final area example added * Add derived-chart-type * Bar scriptable sample * Scriptable samples * Clean lint errors * added linear axis samples to vuepress * change tab to spaces to fix lint error * Convert the rest of the scale samples * Scale option samples * Fix typo * Fixes * Legend samples * Title samples * Change the title of the tip block to Note (#8758) * Convert bar samples to Vuepress * Some line chart samples moved over * Fix lint issues * Derived axis type sample * LineAreaStacked chart created in vuepress * added radar area axample * Line dataset added sample * final area example added * Add derived-chart-type * Bar scriptable sample * Scriptable samples * Clean lint errors * added linear axis samples to vuepress * change tab to spaces to fix lint error * Convert the rest of the scale samples * Scale option samples * Fix typo * Fixes * Legend samples * Advanced samples * Remove extra section * Animation samples * Hide legend from progressive line * Add a comment on what `from` does * Tooltip samples * Ädd other charts to vuepress samples * enable plugin again since all samples have been converted * fix skip radar example, middle skip was not calculated correctly * lint error * Progressive-line: add 2nd line * Fix lint errors Co-authored-by: Jukka Kurkela <jukka.kurkela@gmail.com> Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com> Co-authored-by: Jacco van den Berg <39033624+LeeLenaleee@users.noreply.github.com>
2021-04-02 14:04:39 +02:00
# Radial Gradient
```js chart-editor
// <block:setup:3>
const DATA_COUNT = 5;
Utils.srand(110);
const chartColors = Utils.CHART_COLORS;
const colors = [chartColors.red, chartColors.orange, chartColors.yellow, chartColors.green, chartColors.blue];
const cache = new Map();
let width = null;
let height = null;
const actions = [
{
name: 'Randomize',
handler(chart) {
chart.data.datasets.forEach(dataset => {
dataset.data = generateData();
});
chart.update();
}
},
];
// </block:setup>
// <block:createRadialGradient3:0>
function createRadialGradient3(context, c1, c2, c3) {
const chartArea = context.chart.chartArea;
if (!chartArea) {
// This case happens on initial chart load
return;
Vuepress samples (#8756) * Generate API docs with vuepress-plugin-typedoc * Links, fixes, cleanup * Convert bar samples to Vuepress * Some line chart samples moved over * Fix lint issues * Derived axis type sample * LineAreaStacked chart created in vuepress * added radar area axample * Line dataset added sample * final area example added * Add derived-chart-type * Bar scriptable sample * Scriptable samples * Clean lint errors * added linear axis samples to vuepress * change tab to spaces to fix lint error * Convert the rest of the scale samples * Scale option samples * Fix typo * Fixes * Legend samples * Title samples * Change the title of the tip block to Note (#8758) * Convert bar samples to Vuepress * Some line chart samples moved over * Fix lint issues * Derived axis type sample * LineAreaStacked chart created in vuepress * added radar area axample * Line dataset added sample * final area example added * Add derived-chart-type * Bar scriptable sample * Scriptable samples * Clean lint errors * added linear axis samples to vuepress * change tab to spaces to fix lint error * Convert the rest of the scale samples * Scale option samples * Fix typo * Fixes * Legend samples * Advanced samples * Remove extra section * Animation samples * Hide legend from progressive line * Add a comment on what `from` does * Tooltip samples * Ädd other charts to vuepress samples * enable plugin again since all samples have been converted * fix skip radar example, middle skip was not calculated correctly * lint error * Progressive-line: add 2nd line * Fix lint errors Co-authored-by: Jukka Kurkela <jukka.kurkela@gmail.com> Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com> Co-authored-by: Jacco van den Berg <39033624+LeeLenaleee@users.noreply.github.com>
2021-04-02 14:04:39 +02:00
}
const chartWidth = chartArea.right - chartArea.left;
const chartHeight = chartArea.bottom - chartArea.top;
if (width !== chartWidth || height !== chartHeight) {
cache.clear();
}
var gradient = cache.get(c1 + c2 + c3);
if (!gradient) {
// Create the gradient because this is either the first render
// or the size of the chart has changed
width = chartWidth;
height = chartHeight;
const centerX = (chartArea.left + chartArea.right) / 2;
const centerY = (chartArea.top + chartArea.bottom) / 2;
const r = Math.min(
(chartArea.right - chartArea.left) / 2,
(chartArea.bottom - chartArea.top) / 2
);
var ctx = context.chart.ctx;
gradient = ctx.createRadialGradient(centerX, centerY, 0, centerX, centerY, r);
gradient.addColorStop(0, c1);
gradient.addColorStop(0.5, c2);
gradient.addColorStop(1, c3);
cache.set(c1 + c2 + c3, gradient);
}
return gradient;
}
// </block:createRadialGradient3>
// <block:data:2>
function generateData() {
return Utils.numbers({
count: DATA_COUNT,
min: 0,
max: 100
});
}
const data = {
labels: Utils.months({count: DATA_COUNT}),
datasets: [{
data: generateData()
}]
};
// </block:data>
// <block:config:1>
const config = {
type: 'polarArea',
data: data,
options: {
plugins: {
legend: false,
tooltip: false,
},
elements: {
arc: {
backgroundColor: function(context) {
let c = colors[context.dataIndex];
if (!c) {
return;
}
if (context.active) {
c = helpers.getHoverColor(c);
}
const mid = helpers.color(c).desaturate(0.2).darken(0.2).rgbString();
const start = helpers.color(c).lighten(0.2).rotate(270).rgbString();
const end = helpers.color(c).lighten(0.1).rgbString();
return createRadialGradient3(context, start, mid, end);
},
}
}
}
};
// </block:config>
module.exports = {
actions,
config,
};
```