我有堆栈高级图表,如果列只有一个堆栈值,我想隐藏标签文本。
在这种情况下,我想在列中隐藏Board文本。
我尝试在dataLabels
formatter
中处理,但未成功
dataLabels: {
formatter: function() {
console.log(this);
debugger;
let countValue = this.series.userOptions.data.filter(x => x != 0).length;
if(countValue <= 1){
return '';
}
return this.series.name;
},
这是我的源代码
JSFiddle https://jsfiddle.net/viethien/ak2h1sfq/11/
谢谢
Highcharts.chart('container', {
chart: {
type: 'column'
},
title: {
text: 'Stacked column chart'
},
xAxis: {
categories: ['A', 'B', 'C', 'D', 'E']
},
yAxis: {
min: 0,
title: {
text: 'Total fruit consumption'
},
stackLabels: {
enabled: true,
style: {
fontWeight: 'bold',
textOutline: false,
color: ( // theme
Highcharts.defaultOptions.title.style &&
Highcharts.defaultOptions.title.style.color
) || 'gray'
}
}
},
legend: {
align: 'center',
x: 0,
verticalAlign: 'bottom',
y: 5,
backgroundColor:
Highcharts.defaultOptions.legend.backgroundColor || 'white',
borderColor: '#CCC',
borderWidth: 0,
shadow: false
},
tooltip: {
headerFormat: '<b>{point.x}</b><br/>',
pointFormat: '{series.name}: {point.y}<br/>Total: {point.stackTotal}'
},
plotOptions: {
column: {
stacking: 'normal',
dataLabels: {
enabled: true
}
},
series: {
//stacking: 'normal',
dataLabels: {
formatter: function() {
console.log(this);
debugger;
let countValue = this.series.userOptions.data.filter(x => x != 0).length;
if(countValue <= 1){
return '';
}
return this.series.name;
},
enabled: true,
//allowOverlap: true,
//align: 'right',
color: '#444',
textOutline: false,
shadow: false,
//x:-50,
style: {
fontSize: "8px",
textShadow: "0px"
}
},
//pointPadding: 0.1,
pointWidth: 50,
groupPadding: 0.2,
stacking: 'normal',
//colorByPoint: true,
//showInLegend: false
}
},
series: [{
name: 'Component',
data: [4, 7, 3],
stack: 'Forecast'
}, {
name: 'Module',
data: [3, 2, 2],
stack: 'Forecast'
},
{
name: 'Board',
data: [5, 5, 3, 2],
stack: 'Forecast'
},
{
name: 'Component',
data: [6, 4, 5, 8],
stack: 'Real'
}, {
name: 'Module',
data: [3, 3, 4, 3],
stack: 'Real'
},
{
name: 'Board',
data: [4, 6, 6, 4],
stack: 'Real'
}
]
});
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<figure class="highcharts-figure">
<div id="container"></div>
</figure>
您可以比较y
与total
,如果它们相等,则此列只有一个堆栈。类似于:
formatter: function() {
if(this.y == this.total){
return '';
}
return this.series.name;
}