$(function () {
var formatNumber = new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format;
var 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: function(e) {
return e.argumentText + "\n" + e.valueText;
}
}
}],
centerTemplate: function(pieChart, container) {
var total = pieChart.getAllSeries()[0].getVisiblePoints().reduce(function(s, p) { return s + p.originalValue; }, 0),
country = pieChart.getAllSeries()[0].getVisiblePoints()[0].data.country,
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/20.2.4/css/dx.common.css" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.4/css/dx.light.css" />
<script src="https://cdn3.devexpress.com/jslib/20.2.4/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;
}
var data = [
{ country: "France", commodity: "Nuclear", total: 403195 },
{ country: "Germany", commodity: "Nuclear", total: 84634 },
{ country: "India", commodity: "Nuclear", total: 37916 },
{ country: "France", commodity: "Thermal", total: 57471 },
{ country: "Germany", commodity: "Thermal", total: 419591 },
{ country: "India", commodity: "Thermal", total: 1188280 },
{ country: "France", commodity: "Wind", total: 21400 },
{ country: "Germany", commodity: "Wind", total: 78598 },
{ country: "India", commodity: "Wind", total: 35530 },
{ country: "France", commodity: "Solar", total: 8160 },
{ country: "Germany", commodity: "Solar", total: 38098 },
{ country: "India", commodity: "Solar", total: 12578 },
{ country: "France", commodity: "Tidal, Wave", total: 501 }
];