Multiseries Bar Chart with Tooltip Customization - showing total and percent - CanvasJS JavaScript Charts
Multiseries Bar Chart with Tooltip Customization - showing total and percent - CanvasJS JavaScript Charts
by canvasjs
HTML
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<div id="chartContainer" style="height: 370px; width: 100%;"></div>
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
JavaScript
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
title:{
text: "Olympic Medals of all Times (till 2016 Olympics)"
},
axisY: {
title: "Medals"
},
legend: {
cursor:"pointer",
itemclick : toggleDataSeries
},
toolTip: {
shared: true,
content: toolTipFormatter
},
data: [{
type: "bar",
showInLegend: true,
name: "Gold",
color: "gold",
dataPoints: [
{ y: 243, label: "Italy" },
{ y: 236, label: "China" },
{ y: 243, label: "France" },
{ y: 273, label: "Great Britain" },
{ y: 269, label: "Germany" },
{ y: 196, label: "Russia" },
{ y: 1118, label: "USA" }
]
},
{
type: "bar",
showInLegend: true,
name: "Silver",
color: "silver",
dataPoints: [
{ y: 212, label: "Italy" },
{ y: 186, label: "China" },
{ y: 272, label: "France" },
{ y: 299, label: "Great Britain" },
{ y: 270, label: "Germany" },
{ y: 165, label: "Russia" },
{ y: 896, label: "USA" }
]
},
{
type: "bar",
showInLegend: true,
name: "Bronze",
color: "#A57164",
dataPoints: [
{ y: 236, label: "Italy" },
{ y: 172, label: "China" },
{ y: 309, label: "France" },
{ y: 302, label: "Great Britain" },
{ y: 285, label: "Germany" },
{ y: 188, label: "Russia" },
{ y: 788, label: "USA" }
]
}]
});
chart.render();
function toolTipFormatter(e) {
var str = "";
var total = 0;
var percent = 0;
var str3;
var str2 ;
for (var i = 0; i < e.entries.length; i++){
total = e.entries[i].dataPoint.y + total;
}
for (var i = 0; i < e.entries.length; i++){
var str1 = "<span style= \"color:"+e.entries[i].dataSeries.color + "\">" + e.entries[i].dataSeries.name + "</span>: <strong>"+ e.entries[i].dataPoint.y + "</strong>" ;
percent = (e.entries[i].dataPoint.y / total * 100).toFixed(2);
str1 = str1.concat( " (" + percent + "%) <br/>");
str = str.concat(str1);
}
str2 = "<strong>" + e.entries[0].dataPoint.label + "</strong> <br/>";
str3 =...