Spending Gap - Stacked Bar Horizontal Shortage

Stacked bar charts are useful to demonstrate how a larger data category is comprised of smaller categories, and what part each of the smaller categories plays in the total of a larger one.

by amcharts

HTML

<script src="https://www.amcharts.com/lib/4/core.js"></script>
<script src="https://www.amcharts.com/lib/4/charts.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
<div id="chartdiv"></div>

CSS

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}

#chartdiv {
  width: 100%;
  height: 500px;
}

JavaScript

/**
 * ---------------------------------------
 * This demo was created using amCharts 4.
 * 
 * For more information visit:
 * https://www.amcharts.com/
 * 
 * Documentation is available at:
 * https://www.amcharts.com/docs/v4/
 * ---------------------------------------
 */

// Themes begin
am4core.useTheme(am4themes_animated);
// Themes end

// Create chart instance
var chart = am4core.create("chartdiv", am4charts.XYChart);


// Add data
chart.data = [{
  "SpendingGap": "",
  "Proposed": 3000,
  "Desired":  2000,
  "Minimum":  1000
}];

// Create axes
var categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());
categoryAxis.dataFields.category = "SpendingGap";
//categoryAxis.renderer.grid.template.location = 0;
categoryAxis.renderer.grid.template.disabled = true; //disable grid lines


var valueAxis = chart.xAxes.push(new am4charts.ValueAxis());
valueAxis.renderer.inside = false;
valueAxis.renderer.labels.template.disabled = true;
//valueAxis.min = 0;
//valueAxis.title.text = "Amount";
//chart.numberFormatter.numberFormat = '$#,###';
valueAxis.renderer.grid.template.disabled = true; //disable grid lines


////////////////////////////////////////////////////
var series = chart.series.push(new am4charts.ColumnSeries());
series.name = "Minimum";
series.dataFields.valueX = "Minimum";
series.dataFields.categoryY = "SpendingGap";
series.sequencedInterpolation = true;
series.stacked = true;
// Configure columns
series.columns.template.height = am4core.percent(60);
/* series.columns.template.tooltipText = "[bold]{name}[/]\n[font-size:14px]$1,000";
series.columns.template.tooltipY = 0;
series.columns.template.tooltipX=0; */
//series.columns.template.tooltipX=115;
//series.columns.template.tooltipLocation=1;
//series.columns.template.tooltipY.align = "right";
//series.columns.template.horizontalCenter="right";
/* series.tooltip.align="right"; */
series.tooltip.pointerOrientation = "down";
series.columns.template.alwaysShowTooltip =...