]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Add multi series pie example (#6919)
authorEvert Timberg <evert.timberg+github@gmail.com>
Mon, 6 Jan 2020 20:04:41 +0000 (15:04 -0500)
committerGitHub <noreply@github.com>
Mon, 6 Jan 2020 20:04:41 +0000 (15:04 -0500)
samples/charts/multi-series-pie.html [new file with mode: 0644]
samples/samples.js

diff --git a/samples/charts/multi-series-pie.html b/samples/charts/multi-series-pie.html
new file mode 100644 (file)
index 0000000..4a61c42
--- /dev/null
@@ -0,0 +1,95 @@
+<!doctype html>
+<html>
+
+<head>
+       <title>Multi Series Pie Chart</title>
+       <script src="../../dist/Chart.js"></script>
+       <script src="../utils.js"></script>
+</head>
+
+<body>
+       <div id="canvas-holder" style="width:40%">
+               <canvas id="chart-area"></canvas>
+       </div>
+       <script>
+               var ctx = document.getElementById('chart-area');
+               new Chart(ctx, {
+                       type: 'pie',
+                       data: {
+                               labels: [
+                                       'Overall Yay',
+                                       'Overall Nay',
+                                       'Group A Yay',
+                                       'Group A Nay',
+                                       'Group B Yay',
+                                       'Group B Nay',
+                                       'Group C Yay',
+                                       'Group C Nay'
+                               ],
+                               datasets: [
+                                       {backgroundColor: ['#AAA', '#777'], data: [21, 79]},
+                                       {
+                                               backgroundColor: ['hsl(0, 100%, 60%)', 'hsl(0, 100%, 35%)'],
+                                               data: [33, 67]
+                                       },
+                                       {
+                                               backgroundColor: ['hsl(100, 100%, 60%)', 'hsl(100, 100%, 35%)'],
+                                               data: [20, 80]
+                                       },
+                                       {
+                                               backgroundColor: ['hsl(180, 100%, 60%)', 'hsl(180, 100%, 35%)'],
+                                               data: [10, 90]
+                                       }
+                               ]
+                       },
+                       options: {
+                               legend: {
+                                       labels: {
+                                               generateLabels: function(chart) {
+                                                       // Get the default label list
+                                                       var original = Chart.defaults.pie.legend.labels.generateLabels;
+                                                       var labels = original.call(this, chart);
+
+                                                       // Build an array of colors used in the datasets of the chart
+                                                       var datasetColors = chart.data.datasets.map(function(e) {
+                                                               return e.backgroundColor;
+                                                       });
+                                                       datasetColors = datasetColors.flat();
+
+                                                       // Modify the color and hide state of each label
+                                                       labels.forEach(label => {
+                                                               // There are twice as many labels as there are datasets. This converts the label index into the corresponding dataset index
+                                                               label.datasetIndex = (label.index - label.index % 2) / 2;
+
+                                                               // The hidden state must match the dataset's hidden state
+                                                               label.hidden = !chart.isDatasetVisible(label.datasetIndex);
+
+                                                               // Change the color to match the dataset
+                                                               label.fillStyle = datasetColors[label.index];
+                                                       });
+
+                                                       return labels;
+                                               }
+                                       },
+                                       onClick: function(mouseEvent, legendItem) {
+                                               // toggle the visibility of the dataset from what it currently is
+                                               this.chart.getDatasetMeta(
+                                                       legendItem.datasetIndex
+                                               ).hidden = this.chart.isDatasetVisible(legendItem.datasetIndex);
+                                               this.chart.update();
+                                       }
+                               },
+                               tooltips: {
+                                       callbacks: {
+                                               label: function(tooltipItem, data) {
+                                                       var labelIndex = (tooltipItem.datasetIndex * 2) + tooltipItem.index;
+                                                       return data.labels[labelIndex] + ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
+                                               }
+                                       }
+                               }
+                       }
+               });
+       </script>
+</body>
+
+</html>
\ No newline at end of file
index c85cac37a4dd5b8e10c83b265572e80de50af9be..c91d7cf149f13a56cb0e2773e53ec680f1958d85 100644 (file)
@@ -79,6 +79,9 @@
                }, {
                        title: 'Pie',
                        path: 'charts/pie.html'
+               }, {
+                       title: 'Multi Series Pie',
+                       path: 'charts/multi-series-pie.html'
                }, {
                        title: 'Polar area',
                        path: 'charts/polar-area.html'