Your search did not match any results.
Doughnut Charts

Custom Label in the Center

To customize the doughnut's center, declare the SVG markup in the centerTemplate. This template accepts the PieChart instance. Use this instance to call PieChart methods. For example, call the getInnerRaduis() method to get the radius of the doughnut hole.

Backend API
Copy to CodePen
Apply
Reset
$(() => { const formatNumber = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format; const commonSettings = { innerRadius: 0.65, resolveLabelOverlapping: 'shift', sizeGroup: 'piesGroup', legend: { visible: false, }, type: 'doughnut', series: [{ argumentField: 'commodity', valueField: 'total', label: { visible: true, connector: { visible: true, }, format: 'fixedPoint', backgroundColor: 'none', customizeText(e) { return `${e.argumentText}\n${e.valueText}`; }, }, }], centerTemplate(pieChart, container) { const total = pieChart .getAllSeries()[0] .getVisiblePoints() .reduce((s, p) => s + p.originalValue, 0); const { country } = pieChart.getAllSeries()[0].getVisiblePoints()[0].data; const content = $(`<svg><circle cx="100" cy="100" fill="#eee" r="${pieChart.getInnerRadius() - 6}"></circle>` + `<image x="70" y="58" width="60" height="40" href="../../../../images/flags/${country.replace(/\s/, '').toLowerCase()}.svg"/>` + '<text text-anchor="middle" style="font-size: 18px" x="100" y="120" fill="#494949">' + `<tspan x="100" >${country}</tspan>` + `<tspan x="100" dy="20px" style="font-weight: 600">${ formatNumber(total) }</tspan></text></svg>`); container.appendChild(content.get(0)); }, }; $('#countries') .dxPieChart($.extend({}, commonSettings, { dataSource: { store: data, filter: ['country', '=', 'France'], }, })); $('#waterLandRatio') .dxPieChart($.extend({}, commonSettings, { dataSource: { store: data, filter: ['country', '=', 'Germany'], }, })); });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/22.2.6/css/dx.light.css" /> <script src="https://cdn3.devexpress.com/jslib/22.2.6/js/dx.all.js"></script> <script src="data.js"></script> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="index.js"></script> </head> <body class="dx-viewport"> <div class="demo-container"> <div class="long-title"><h3>Energy Production (GWh, 2016)</h3></div> <div class="pies-container"> <div id="countries"></div> <div id="waterLandRatio"></div> </div> </div> </body> </html>
.pies-container { margin: auto; width: 800px; } .pies-container > div { width: 400px; float: left; margin-top: -50px; } .long-title h3 { font-weight: 200; font-size: 28px; text-align: center; margin-bottom: 20px; }
const data = [ { country: 'France', commodity: 'Nuclear', total: 413278 }, { country: 'Germany', commodity: 'Nuclear', total: 76536 }, { country: 'France', commodity: 'Thermal', total: 47594 }, { country: 'Germany', commodity: 'Thermal', total: 375809 }, { country: 'France', commodity: 'Wind', total: 21033 }, { country: 'Germany', commodity: 'Wind', total: 58228 }, { country: 'France', commodity: 'Solar', total: 7274 }, { country: 'Germany', commodity: 'Solar', total: 37520 }, { country: 'France', commodity: 'Tidal, Wave', total: 618 }, ];