score:2

Accepted answer

basically, you need to subtract the second value from the first one before the chart initializes, so that, it doesn't draw the graph with combined values.

to accomplish so, you can use the following chart plugin ...

plugins: [{
   beforeinit: function(c) {
      var data1 = c.data.datasets[0].data;
      var data2 = c.data.datasets[1].data;
      c.data.datasets[0].data = data1.map(function(e, i) {
         return e - data2[i];
      });
   }
}]

add this plugin followed by your chart options.

update

use the following tooltips callback function to show the old values on tooltip's label ...

tooltips: {
   callbacks: {
      label: function(t, d) {
         var dst1_label = d.datasets[t.datasetindex].label + ': ' + (+t.ylabel + d.datasets[1].data[t.index]);
         var dst2_label = d.datasets[t.datasetindex].label + ': ' + t.ylabel;
         if (t.datasetindex === 0) return dst1_label;
         else return dst2_label;
      }
   }
}

ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ ⧩

var ctx = document.getelementbyid("mychart");
var mychart = new chart(ctx, {
   type: 'bar',
   data: {
      labels: ["red", "blue", "yellow", "green", "purple", "orange"],
      datasets: [{
         label: 'sales',
         data: [500, 300],
         backgroundcolor: [
            'rgba(255, 99, 132, 0.2)',
            'rgba(255, 99, 132, 0.2)',
            'rgba(255, 99, 132, 0.2)',
            'rgba(255, 99, 132, 0.2)',
            'rgba(255, 99, 132, 0.2)',
            'rgba(255, 99, 132, 0.2)'
         ],
         bordercolor: [
            'rgba(255,99,132,1)',
            'rgba(255,99,132,1)',
            'rgba(255,99,132,1)',
            'rgba(255,99,132,1)',
            'rgba(255,99,132,1)',
            'rgba(255,99,132,1)'
         ],
         borderwidth: 2
      }, {
         label: 'earning',
         data: [100, 30],
         backgroundcolor: [
            'rgba(255, 159, 64, 0.2)',
            'rgba(255, 159, 64, 0.2)',
            'rgba(255, 159, 64, 0.2)',
            'rgba(255, 159, 64, 0.2)',
            'rgba(255, 159, 64, 0.2)',
            'rgba(255, 159, 64, 0.2)'
         ],
         bordercolor: [
            'rgba(255, 159, 64, 1)',
            'rgba(255, 159, 64, 1)',
            'rgba(255, 159, 64, 1)',
            'rgba(255, 159, 64, 1)',
            'rgba(255, 159, 64, 1)',
            'rgba(255, 159, 64, 1)'
         ],
         borderwidth: 2
      }]
   },
   options: {
      scales: {
         yaxes: [{
            stacked: true,
            ticks: {
               beginatzero: true
            }
         }],
         xaxes: [{
            stacked: true,
            ticks: {
               beginatzero: true
            }
         }]
      },
      tooltips: {
         callbacks: {
            label: function(t, d) {
               var dst1_label = d.datasets[t.datasetindex].label + ': ' + (+t.ylabel + d.datasets[1].data[t.index]);
               var dst2_label = d.datasets[t.datasetindex].label + ': ' + t.ylabel;
               if (t.datasetindex === 0) return dst1_label;
               else return dst2_label;

            }
         }
      }
   },
   plugins: [{
      beforeinit: function(c) {
         var data1 = c.data.datasets[0].data;
         var data2 = c.data.datasets[1].data;
         c.data.datasets[0].data = data1.map(function(e, i) {
            return e - data2[i];
         });
      }
   }]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/chart.js/2.6.0/chart.min.js"></script>
<canvas id="mychart" width="400" height="400"></canvas>


Related Query

More Query from same tag