How do I access halo on column click event? - highcharts
How do I access the halo on click event? In my current code, I can only create an on click event to the actual column (point). I want the user to be able to click anywhere in the shaded area, rather than on the actual column.
My code below:
<Chart
chart={{
type: 'column',
backgroundColor: {
linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },
stops: [
[0, '#2a2a2b'],
[1, '#3e3e40']
]
},
plotBorderColor: '#606063'
}}
title={{
text: 'Quailty Score',
style: {
color: '#E0E0E3',
fontSize: '20px'
}
}}
xAxis={[{
categories: qualityScore.accountQualityScore.graphData.qualityScore,
crosshair: true,
gridLineColor: '#707073',
labels: {
style: {
color: '#E0E0E3'
}
},
lineColor: '#707073',
minorGridLineColor: '#505053',
tickColor: '#707073',
title: {
style: {
color: '#A0A0A3'
}
}
}]}
yAxis={[{
min: 0,
gridLineColor: '#707073',
labels: {
style: {
color: '#E0E0E3'
}
},
lineColor: '#707073',
minorGridLineColor: '#505053',
tickColor: '#707073',
title: {
text: 'Ad Groups',
style: {
color: '#A0A0A3'
}
}
}]}
tooltip={{
headerFormat: '<table>',
pointFormat: '<tr><td style="color:{series.color};padding:0"> {series.name}: </td>' +
'<td style="padding:0"><b>{point.y:.1f}</b></td></tr>',
footerFormat: '</table>',
shared: true,
useHTML: true,
backgroundColor: 'rgba(0, 0, 0, 0.85)',
style: {
color: '#F0F0F0'
}
}}
plotOptions={{
column: {
pointPadding: 0.1,
borderWidth: 0,
point: {
events: {
click: (e) => {
console.log(`value: ${e.point.y}`);
}
}
}
},
series: {
dataLabels: {
color: '#B0B0B3'
},
marker: {
lineColor: '#333'
}
},
boxplot: {
fillColor: '#505053'
},
candlestick: {
lineColor: 'white'
},
errorbar: {
color: 'white'
}
}}
series={[{
name: 'Ad Groups',
data: qualityScore.accountQualityScore.graphData.count
}]}
legend={{
itemStyle: {
color: '#E0E0E3'
},
itemHoverStyle: {
color: '#FFF'
},
itemHiddenStyle: {
color: '#606063'
}
}}
loading={qualityScore.accountQualityScore.loading}
/>
I'm sure this is another one that has multiple answers.
I approached by using the chart click event, like this:
chart: {
events: {
click: function(e) {
var xVal = Math.round(e.xAxis[0].value),
yVal = this.series[0].data[xVal].y;
console.log('x: ', xVal, 'y: ', yVal);
}
}
}
Which works great for when the user clicks off of the point, but when they click on the point, the point click event overrides the chart click event.
So I had to capture the point click event as well:
plotOptions: {
series: {
events: {
click: function(e) {
var xVal = e.point.x,
yVal = e.point.y;
console.log('x: ', xVal, 'y: ', yVal);
}
}
}
}
Using both of these click events together, you can capture the same information whether the user clicks on the point, or on the crosshair area above the point.
Example:
http://jsfiddle.net/jlbriggs/xufekLpv/
Related
Select which chart data category to show versus omit
In the following webpage, https://betterbuildingssolutioncenter.energy.gov/energy-data/District%20of%20Columbia , the highchart next to "Portfolio Energy Performance", clicking on the legend icon "Public" omits the public data and only shows the private data. How can I reverse this, so that clicking on the "Public" legend icon omits the private data instead? I have attached the code used for this webpage. // color declarations var colorGreen = '#0b6a39', colorBlue = '#0c4489', colorBlueLight = '#558ed5', colorGray = '#595959', font = 'avenir'; // graph data variables // Portfolio Energy Performance var /* title */ energyPerformanceTitle = 'Average Annual % Improvement by Reporting Period', /* columns */ energyPerformanceCategories = ['2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019'], /* Y max */ energyPerformanceYMax = 9, /* X title */ energyPerformanceXaxis = [''], /* Y title */ energyPerformanceYaxis = ['Average Annual % Improvement'], /* column colors */ energyPerformanceColumns = [colorBlue, colorBlue, colorBlue, colorBlue, colorBlue, colorBlue, colorBlue, colorBlue], /* column data */ energyPerformanceData = [8.53, 3.31, 2.37, 2.91, 2.86, 2.63, 2.4, 0.34], /* goal data */ energyPerformanceGoalData = 2; // Energy Performance by Facility var /* title */ energyFacilityTitle = 'Number of Properties by Cumulative % Improvement', /* columns */ energyFacilityCategories = ['<=0%', '0-2%', '2-6%', '6-10%', '10-15%', '>15%'], /* X title */ energyFacilityXaxis = ['Cumulative % Improvement Category'], /* Y title */ energyFacilityYaxis = ['Number of Properties'], /* Y interval */ energyFacilityYinterval = 10, /* column colors */ energyFacilityColumns = [colorBlue, colorGreen, colorGreen, colorGreen, colorGreen, colorGreen, colorGreen], /* column data */ energyFacilityData = [82, 14, 28, 16, 35, 101]; // Identifying Opportunities for Improvement var /* title */ improvementOpportunityTitle = '% Improvement vs. Baseline EUI', /* columns */ improvementOpportunityCategories = ['0', '200', '400', '600', '800'], /* X min */ improvementOpportunityXMin = 0, /* X max */ improvementOpportunityXMax = 800, /* Y min */ improvementOpportunityYMin = -60, /* Y max */ improvementOpportunityYMax = 100, /* Y interval */ improvementOpportunityYinterval = 20, /* X interval */ improvementOpportunityXinterval = 200, /* X title */ improvementOpportunityXaxis = ['Baseline Source EUI (kBtu/sq.ft.)'], /* Y title */ improvementOpportunityYaxis = ['% Improvement'], /* scatter data */ improvementOpportunityData = [[704,76], [55,-273], [216,10], [205,6], [505,12], [167,4], [147,-7], [254,-14], [307,19], [275,36], [179,-4], [146,-16], [324,17], [225,19], [146,5], [199,18], [162,4], [183,26], [208,20], [187,-13], [187,19], [145,49], [172,24], [206,25], [208,-35], [222,16], [221,19], [145,18], [151,10], [159,-13], [221,20], [150,26], [215,38], [152,11], [158,-17], [174,9], [249,28], [166,12], [231,3], [165,15], [132,16], [217,3], [163,1], [225,3], [151,20], [149,-9], [164,5], [149,-3], [193,30], [177,10], [246,-20], [155,4], [184,17], [200,7], [132,10], [162,12], [149,19], [252,23], [142,-16], [165,10], [230,-2], [180,16], [193,29], [185,5], [61,49], [226,66], [128,46], [141,76], [190,2], [194,24], [217,10], [127,3], [216,15], [89,-23], [137,-9], [162,33], [171,7], [136,19], [190,-6], [155,18], [93,-35], [147,-20], [199,7], [141,14], [177,7], [276,-16], [103,-2], [172,20], [90,-24], [153,17], [184,10], [149,34], [240,-5], [163,-15], [122,-10], [160,-22], [236,16], [139,5], [183,22], [165,12], [141,22], [114,-39], [175,16], [164,26], [141,16], [186,28], [160,-14], [148,14], [231,15], [204,-9], [170,6], [112,-4], [170,27], [191,17], [216,-1], [215,12], [166,19], [131,-13], [109,15], [181,4], [300,28], [210,13], [236,15], [183,19], [144,14], [198,3], [219,-14], [291,12], [169,19], [194,-8], [208,-16], [304,3], [208,0], [195,-5], [175,17], [143,-1], [161,15], [194,-10], [121,-3], [117,21], [189,0], [136,10], [189,-7], [150,-32], [308,-1], [136,-1], [253,-2], [121,25], [427,2], [222,20], [150,-2], [254,33], [284,38], [307,3], [249,26], [178,6], [134,-22], [282,-4], [151,-10], [143,-3], [116,-6], [158,7], [161,16], [260,55], [131,15], [246,3], [113,-3], [209,22], [322,21], [245,39], [197,14], [142,5], [253,23], [197,-9], [184,15], [169,12], [187,12], [132,-21], [195,16], [143,6], [145,-10], [200,35], [142,5], [178,28], [271,21], [140,-29], [125,6], [148,-15], [185,18], [163,36], [173,13], [117,-2], [291,23], [168,-8], [196,26], [202,13], [169,22], [142,-37], [142,-32], [211,22], [165,5], [181,30], [140,0], [126,-15], [410,14], [167,-17], [205,13], [171,-6], [197,24], [167,15], [115,0], [160,31], [164,13], [176,11], [169,23], [153,25], [542,16], [138,-12], [143,-25], [228,-1], [95,10], [147,-14], [200,8], [195,1], [178,12], [192,20], [152,11], [224,1], [150,-2], [247,12], [208,36], [134,-18], [231,-4], [248,-1], [217,-2], [164,22], [288,0], [201,15], [149,26], [206,33], [179,23], [151,22], [168,14], [165,5], [176,12], [145,-15], [103,-40], [163,5], [141,-9], [128,9], [177,30], [238,17], [182,10], [198,23], [147,-8], [205,29], [528,-8], [205,16], [164,15], [163,39], [193,1], [173,-1], [168,30], [233,6], [117,2], [205,13], [110,7], [161,15], [159,4], [197,2], [131,0], [231,-37], [248,0], [140,0], [155,-9], [153,-2],], /* trendline data */ improvementOpportunityTrendLine = [[55, -5], [704, 54]]; // On document ready, call visualize on the datatable. jQuery(document).ready(function () { Highcharts.visualize = function (table, options) { // the categories options.xAxis.categories = energyPerformanceCategories; options.colors = energyPerformanceColumns, options.series = [{ type: 'column', name: ['Public'], data: energyPerformanceData, color: colorBlue, colorByPoint: false, dataLabels: { enabled: false } }, { type: 'column', name: ['Private'], data: [3.3, 4.95, 3.68, 3.31, 2.76, 2.99, 2.3, 1.71], color: colorBlueLight, colorByPoint: false, dataLabels: { enabled: false }, }]; var chart = new Highcharts.Chart(options); } var table = document.getElementById('datatable'), options = { chart: { renderTo: 'energy-performance', type: 'column' }, title: { text: energyPerformanceTitle, style: { color: colorGray, fontFamily: font } }, subtitle: {}, plotOptions: { series: { shadow: false }, column: { borderWidth: 0 } }, xAxis: { title: { text: energyPerformanceXaxis, style: { color: colorGray, fontFamily: font } }, tickLength: 0, lineColor: colorGray, lineWidth: 1 }, yAxis: { title: { text: 'Average Annual % Improvement', style: { color: colorGray, fontFamily: font } }, tickInterval: 1, tickLength: 5, tickWidth: 1, tickColor: colorGray, max: energyPerformanceYMax, lineColor: colorGray, lineWidth: 1, gridLineWidth: 0, plotLines: [{ color: colorGray, width: 2, value: energyPerformanceGoalData, zIndex: 5, label: { text: 'GOAL', align: 'right', x: 11, y: -5, style: { color: colorGray, fontFamily: font, fontWeight: 'bold' } } }], labels: { style: { color: colorGray, fontFamily: font } } }, legend: { enabled: true }, legend: { itemHiddenStyle: { color: colorBlue, colorByPoint: false } }, credits: { enabled: false }, tooltip: { formatter: function () { var raw = ((this.y / energyPerformanceData[0])) * 100, percentage = Math.round(100 - (raw * 100) / 100); if (this.y === energyPerformanceData[0] && this.key === '2012') { return '<strong>' + this.series.name + '</strong><br/>' + '<strong>' + this.x + '</strong>: ' + Highcharts.numberFormat(this.y, 1) + '%'; } else { return '<strong>' + this.series.name + '</strong><br/>' + '<strong>' + this.x + '</strong>: ' + Highcharts.numberFormat(this.y, 1) + '%'; } }, } }; Highcharts.visualize(table, options); }); // On document ready, call visualize on the datatable. jQuery(document).ready(function () { Highcharts.visualize = function (table, options) { // the categories options.xAxis.categories = energyFacilityCategories; options.colors = energyFacilityColumns, options.series = [{ type: 'column', name: energyFacilityYaxis, data: energyFacilityData, color: colorGreen, colorByPoint: true, dataLabels: { enabled: false } }]; var chart = new Highcharts.Chart(options); } var table = document.getElementById('datatable'), options = { chart: { renderTo: 'facility-performance', type: 'column' }, title: { text: energyFacilityTitle, style: { color: colorGray, fontFamily: font } }, subtitle: {}, plotOptions: { series: { shadow: false }, column: { borderWidth: 0 } }, xAxis: { title: { text: energyFacilityXaxis, style: { color: colorGray, fontFamily: font } }, tickLength: 0, lineColor: colorGray, lineWidth: 1, labels: { rotation: -45, y: 30, style: { color: colorGray, fontFamily: font } } }, yAxis: { title: { text: energyFacilityYaxis, style: { color: colorGray, fontFamily: font } }, tickInterval: energyFacilityYinterval, tickLength: 5, tickWidth: 1, tickColor: colorGray, lineColor: colorGray, lineWidth: 1, gridLineWidth: 0, minorTickColor: colorGray, labels: { style: { color: colorGray, fontFamily: font } } }, legend: { enabled: false }, credits: { enabled: false }, tooltip: { formatter: function () { return '<strong>' + this.series.name + '</strong><br/>' + '<strong>' + this.x + '</strong>: ' + this.y; } } }; Highcharts.visualize(table, options); }); // On document ready, call visualize on the datatable. jQuery(document).ready(function () { Highcharts.visualize = function (table, options) { // the categories options.xAxis.categories = improvementOpportunityCategories; options.series = [{ name: improvementOpportunityYaxis, data: improvementOpportunityData, color: colorBlue }, { type: 'line', name: 'Trendline', data: improvementOpportunityTrendLine, color: colorGray, width: 1, marker: { enabled: false } }]; var chart = new Highcharts.Chart(options); } var table = document.getElementById('datatable'), options = { chart: { renderTo: 'improvement-opportunities', type: 'scatter', zoomType: 'xy' }, title: { text: improvementOpportunityTitle, style: { color: colorGray, fontFamily: font } }, subtitle: {}, plotOptions: { series: { shadow: false }, scatter: { marker: { radius: 3, symbol: 'diamond', states: { hover: { enabled: true } } }, states: { hover: { marker: { enabled: false } } } } }, xAxis: { title: { text: improvementOpportunityXaxis, style: { color: colorGray, fontFamily: font } }, lineWidth: 0, min: improvementOpportunityXMin, max: improvementOpportunityXMax, tickInterval: improvementOpportunityXinterval, minTickInterval: 25, tickLength: 0 }, yAxis: { title: { text: improvementOpportunityYaxis, style: { color: colorGray, fontFamily: font } }, min: improvementOpportunityYMin, max: improvementOpportunityYMax, tickInterval: improvementOpportunityYinterval, tickLength: 5, tickWidth: 1, tickColor: colorGray, lineColor: colorGray, lineWidth: 1, gridLineWidth: 0, plotLines: [{ color: colorGray, width: 1, value: 0 }, { color: colorGray, width: 1, value: 0, zIndex: 5 }] }, legend: { enabled: false }, credits: { enabled: false }, tooltip: { formatter: function () { return '<strong>' + this.series.name + ':</strong> ' + this.y; } } }; Highcharts.visualize(table, options); });
Use legendItemClick event and hide/show other series than the clicked one: plotOptions: { series: { events: { legendItemClick: function() { this.chart.series.forEach(function(s) { if (s !== this) { s.setVisible(); } }, this); return false; } } } } Live demo: http://jsfiddle.net/BlackLabel/j0eyc625/ API Reference: https://api.highcharts.com/class-reference/Highcharts.Series#setVisible
Highcharts display column category names on the xaxis
I have an issue displaying the column categories on the xaxis. I can get them to display in the "legend" and the "tooltips". I have searched for a solution with no result. Can anyone see where I am going wrong. My code: $(document).ready(function() { var options = { chart: { renderTo: 'container', type: 'column', marginRight: 130, marginBottom: 25 }, title: { text: '', x: -20 //center }, subtitle: { text: '', x: -20 }, xAxis: { categories: ['Detractors','Passives','Promoters','Not used'] }, yAxis: { endOnTick: false, max:101, showFirstLabel: false, lineColor:'#999', lineWidth:1, tickColor:'#666', tickWidth:1, tickLength:2, tickInterval: 30, gridLineColor:'#ddd', title: { text: 'Percentage %', style: { fontFamily: 'Tahoma', color: '#000000', fontWeight: 'bold', fontSize: '8px' } }, }, tooltip: { formatter: function() { return 'Guest responses:<br/> '+ this.y +'%<br/>'+ this.series.name +'<br/>'; } }, legend: { enabled: true, layout: 'vertical', align: 'right', verticalAlign: 'top', x: -10, y: 100, borderWidth: 0 }, colors: ['#FF0000','#FF6600','#009900','#333333'], plotOptions: { column: { colorByPoint: false }, series: { cursor: 'pointer', pointWidth: 20, point: { events: { //click: function() { } }, legendIndex:0, dataLabels: { enabled: true, color: '#000000', align: 'center', cursor: 'pointer', //borderRadius: 5, //backgroundColor: 'rgba(252, 255, 255, 255)', //borderWidth: 1, //borderColor: '#AAA', y: -6, format: '{y:.1f} %', // one decimal y: -20, // 10 pixels down from the top style: { textShadow: false, fontSize: '8px', fontFamily: 'Verdana, sans-serif' }, formatter: function() { return '<b>Guest responses: '+ this.y +'<br/>'+ this.series.name +'%</b>'; } } } }, credits: { enabled: false }, lang: { noData: "No data" }, noData: { style: { fontWeight: 'normal', fontSize: '12px', color: '#303030' } }, navigation: { buttonOptions: { enabled: false } }, series: [] } $.getJSON("../charts/1-2-4-reports_chart.php?TAG=<?php echo $_SESSION['SectionVar'];?>&From=<?php echo $_SESSION['StartDate'];?>&To=<?php echo $_SESSION['EndDate'];?>", function(json) { options.xAxis.categories = json[0]; options.series[0] = json[0]; options.series[1] = json[1]; options.series[2] = json[2]; options.series[3] = json[3]; chart = new Highcharts.Chart(options); }); }); Many thanks in advance for your time.
Highcharts Stacked Bar: How to remove spacing between bars
I'm working with the highcharts stacked bar and want to remove some space between the bars so I can make room for some text I am rendering. I've tried pointPadding and groupPadding but those are not working. I've tried minPadding/maxPadding on the xAxis and that did not do anything as well. Seems the only way get rid of that space is to change the width of the whole chart which is what I really don't want. Here is my fiddle: http://jsfiddle.net/nick1572/dfcysj39/ $("#profit-chart").highcharts({ lang: { thousandsSep: "," }, chart: { type: "column", style: { fontFamily: "Open Sans, sans-serif" } }, legend: { enabled: false }, title: { text: "" }, xAxis: { //minPadding: 20, Not working here //maxPadding:1, Not working here either categories: [ "other business", "somekind of business profit" ], labels: { style: { color: "#333333", fontSize: "15px" } } }, yAxis: { gridLineDashStyle: "longdash", title: { text: "Dollars" }, labels: { enabled: true, formatter: function() { return "$" + Highcharts.numberFormat(this.value, 0, "", ","); } } }, tooltip: { enabled: false }, plotOptions: { column: { stacking: "normal", dataLabels: { enabled: true, color: "white", inside: true, useHTML: true, style: { fontSize: "18px", fontWeight: "600" } } }, series: { //pointPadding: 0, //groupPadding: 0, this does not work animation: { complete: function() { } }, pointWidth: 145 } }, series: [ { color: "#327631", data: [ 0, 850 ], stack: "female", dataLabels: { enabled: true, formatter: function() { if (0 != this.y) return "$" + Highcharts.numberFormat(this.y, 0); else return null; } } }, { color: "#ADC9AD ", data: [ 10000, 10000 ], stack: "female", dataLabels: { enabled: true, formatter: function() { return "$" + Highcharts.numberFormat(this.y, 0); } } }] }, function (chart) { // on complete chart.renderer.text('<span class="bracketed">}</span> <em>Profit</em>', 870, 85) .css({ color: 'green', fontSize: '24px', x: 200 }) .add(); });//End HighCharts Call Thanks in advance!
it seems that the point width setting is conflicting with the groupPadding and pointPadding .. if you remove the pointWidth: 145 in the series and add groupPadding and pointPadding to the column you will get the gap removed. on the flipside however the bars will take up the entire available width of your chart. column: { stacking: "normal", groupPadding: 0,//add here pointPadding: 0,//add here ... } http://jsfiddle.net/dfcysj39/9/
Ok so I think this may solve my problem at this point. Not sure if its the right way but it works. The pointPadding and groupPadding partially worked for this particular problem. I thank you Birgit for taking the time to respond!!! What I did to solve this is explicitly put a spacingRight on the chart to give the plot area more space w/o making the bars wider. I did go back and add some pointPadding to make the cols a little wider for aesthetics. This allowed for the rendered text to show. http://jsfiddle.net/nick1572/dfcysj39/ $("#profit-chart").highcharts({ lang: { thousandsSep: "," }, chart: { spacingRight: 220, type: "column", width: 1200, style: { fontFamily: "Open Sans, sans-serif" } }, legend: { enabled: false }, title: { text: "" }, xAxis: { //minPadding: 20, Not working here //maxPadding:1, Not working here either categories: [ "other business", "somekind of business profit" ], labels: { style: { color: "#333333", fontSize: "15px" } } }, yAxis: { gridLineDashStyle: "longdash", title: { text: "Dollars" }, labels: { enabled: true, formatter: function() { return "$" + Highcharts.numberFormat(this.value, 0, "", ","); } } }, tooltip: { enabled: false }, plotOptions: { column: { stacking: "normal", dataLabels: { enabled: true, color: "white", inside: true, useHTML: true, style: { fontSize: "18px", fontWeight: "600" } } }, series: { pointPadding: 0.05, //groupPadding: 0, this does not work animation: { complete: function() { } }//, //pointWidth: 145 } }, series: [ { color: "#327631", data: [ 0, 850 ], stack: "female", dataLabels: { enabled: true, formatter: function() { if (0 != this.y) return "$" + Highcharts.numberFormat(this.y, 0); else return null; } } }, { color: "#ADC9AD ", data: [ 10000, 10000 ], stack: "female", dataLabels: { enabled: true, formatter: function() { return "$" + Highcharts.numberFormat(this.y, 0); } } }] }, function (chart) { // on complete chart.renderer.text('<span class="bracketed">}</span> <em>Profit</em>', 900, 84) .css({ color: 'green', fontSize: '24px', x: 200 }) .add(); });//End HighCharts Call
highcharts download context menu size
I am using highcharts & highstock latest versions and been struggling ever since day 1 to get the download context menu width size right... there seems to be no way to control the context's menu width and I am not sure what I am doing wrong... please take a look on the below image. Any help would be appreciated. <div id='CurrentDemand' style='width:1124px; height:400px;'></div> function Chart_CurrentDemand_Bar(DIVID, TITLE, CATEGORIES, yAxisLabel, Tooltip, SERIES1LABEL, SERIES1VALUES ) { var Param_CATEGORIESS = JSON.stringify(CATEGORIES); var Param_SERIES1VALUES = JSON.stringify(SERIES1VALUES); var data_CATEGORIESS = JSON.parse(Param_CATEGORIESS); var data_SERIES1VALUES = JSON.parse(Param_SERIES1VALUES); $("#" + DIVID).highcharts({ chart: { type: 'column' }, title: { text: TITLE }, xAxis: { categories: data_CATEGORIESS, tickInterval: .5, tickmarkPlacement: 'on', gridLineWidth: .5 }, yAxis: { min: 0, title: { text: yAxisLabel } }, tooltip: { headerFormat: '<span style="font-size:20px">{point.key}</span><table width=150px>', pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' + '<td style="padding:0"><b>{point.y:1f} </b></td></tr>', footerFormat: '</table>', shared: true, useHTML: true, animation:true }, plotOptions: { column: { pointPadding: 0.2, borderWidth: 0 } }, series: [{ name: SERIES1LABEL, data: data_SERIES1VALUES }], navigation: { buttonOptions: { verticalAlign: 'bottom', y: -20, height: 30, theme: { 'stroke-width': 1, stroke: 'silver', r: 0, states: { hover: { fill: '#bada55' }, select: { stroke: '#039', fill: '#bada55' } } } } } }); }
Stacklabels on Waterfall Highcharts
I am trying to add stacklabels to the waterfall chart. The stacks with positive 'y' value show the stacklabel but the ones with negative 'y' value are not visible. http://jsfiddle.net/kGH8r/ $(function () { $('#container').highcharts({ chart: { type: 'waterfall' }, title: { text: 'Highcharts Waterfall' }, xAxis: { type: 'category' }, yAxis: { title: { text: 'USD' }, stackLabels: { enabled: true } }, legend: { enabled: false }, tooltip: { pointFormat: '<b>${point.y:,.2f}</b> USD' }, series: [{ upColor: Highcharts.getOptions().colors[2], color: Highcharts.getOptions().colors[3], data: [{ name: 'Start', y: 120000 }, { name: 'Product Revenue', y: 569000 }, { name: 'Service Revenue', y: 231000 }, { name: 'Positive Balance', isIntermediateSum: true, color: Highcharts.getOptions().colors[1] }, { name: 'Fixed Costs', y: -342000 }, { name: 'Variable Costs', y: -233000 }, { name: 'Balance', isSum: true, color: Highcharts.getOptions().colors[1] }], dataLabels: { enabled: true, formatter: function () { return Highcharts.numberFormat(this.y / 1000, 0, ',') + 'k'; }, style: { color: '#FFFFFF', fontWeight: 'bold', textShadow: '0px 0px 3px black' } }, pointPadding: 0 }] }); }); Can I get some help with this?